Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift调试器似乎访问了if语句的错误部分_Swift_If Statement - Fatal编程技术网

Swift调试器似乎访问了if语句的错误部分

Swift调试器似乎访问了if语句的错误部分,swift,if-statement,Swift,If Statement,我在跟踪以下代码时遇到问题: print("%i", session.subsessions.count) // prints 3 print("%i", self.iSessionNumber) // prints 6 print("%i", self.sessions.count - 1) // prints 6 if session.subsessions.count > 1 || self.iSessionNumber == self.sessio

我在跟踪以下代码时遇到问题:

print("%i", session.subsessions.count)    // prints 3
print("%i", self.iSessionNumber)          // prints 6
print("%i", self.sessions.count - 1)      // prints 6
if session.subsessions.count > 1 || self.iSessionNumber == self.sessions.count - 1
{
    // if called
}
else
{

} 
显然,如果应该调用条件。但奇怪的是,else正在被叫。不知道为什么

使现代化
调用else块的原因似乎是因为它是空的。这导致了我的观察:来自if行的控件直接到达if条件的末尾,而没有执行if块中的代码。然后调试器再次调用if行和if块。我仍然不理解调试器的行为,它再次执行if-else语句。

使用括号使代码更易于阅读和执行

if ((session.subsessions.count > 1) || (self.iSessionNumber ==
 (self.sessions.count - 1)))
{
// if called
}
else
{
// else called
}
另外,如果您还没有尝试过以这种方式进行调试,请尝试拆分您的条件以查看失败的地方

if (session.subsessions.count > 1) 
{
    print('passed condition 1')
}
else if self.iSessionNumber == (self.sessions.count - 1)
{
    print('failed condition 1, passed condition 2')
}else
{
    print('no conditions passed')
    print("%i", session.subsessions.count)    // check the numbers
    print("%i", self.iSessionNumber)          
    print("%i", self.sessions.count - 1)    
}

这应该告诉您它在哪里失败,以及如何修复它。检查您的代码,确保您没有动态更改这些值,并且它们在您的语句中仍然相同。

作为健全性检查,如果将print语句放在else部分中,是否会看到相同的打印输出?可能您正在覆盖某个getter,因此isSessionNumber或self.session正在更改计数或竞争条件。。太多了,我们需要更多信息。你重新定义打印功能了吗?打印%i,session.subsessions.count通常会打印%i 3,因为它不知道printf格式。A会很有帮助。因此执行错误的if块不是问题,而是关于调试器显示的内容。你应该相应地更新你的问题,并把它弄清楚。更容易阅读–我不同意。更多的可执行性意味着什么?第二种情况下更多的可执行性不够清晰,这样写可能会有问题——如果情况变得太复杂,你无法确定它们是否正确运行。至少用于调试目的。我发现在调试时,如果有正确的括号,那么更容易清楚地阅读您正在测试的内容。。。不过是个人意见。我理解并不是每个人都这么认为。我更喜欢附加括号,因为它清楚地表明了开发人员的意图,而不是试图在读取较长的代码行时跟踪优先级规则。如果您想更容易地读取代码,我会将iff条件分为2,并将它们放在方法或计算属性中(如果需要)hasPositiveSubsessionCount | | isLastSession{…@vikingosegundo我试图以最小的更改提供更易于阅读/调试的功能,但我100%同意您的意见,即最好将它们拆分为计算属性