Ios 如果在Int的比较值不相等时执行块(Swift)

Ios 如果在Int的比较值不相等时执行块(Swift),ios,swift,debugging,if-statement,Ios,Swift,Debugging,If Statement,我对这个if语句有一些非常奇怪的行为 上述函数始终执行if块,即使键与currentLinePosition的值不同(两者都是INT)。例如,打印输出显示: func audioControllerDidFinishLoadingAudioForKey(key: Int) { print("current line position") print(scriptTableView.currentLinePosition) print("key") print(k

我对这个if语句有一些非常奇怪的行为

上述函数始终执行if块,即使键与currentLinePosition的值不同(两者都是INT)。例如,打印输出显示:

func audioControllerDidFinishLoadingAudioForKey(key: Int) {

    print("current line position")
    print(scriptTableView.currentLinePosition)
    print("key")
    print(key)

    if scriptTableView.currentLinePosition == key && pausedPlayback == false {

        playbackRecordingWithKey(key)

        dispatch_async(dispatch_get_main_queue(), { () -> Void in

            if self.recordLines == true {
                self.setToolbarState(.RecordMode)
            } else {
                self.setToolbarState(.Playing)
            }

        })
    }
}
但仍在调用“playbackRecordingWithKey”(也有打印功能)


有人知道为什么会发生这种情况,或者如何调试这种情况吗?我在这里有点困惑。

感谢@HugoTunius提出多线程问题,并感谢其他人的意见

事实证明,将调用“AudioControllerdFinishLoadingAudioOrkey”的代码放到主线程上解决了我的问题。我不认为打印函数和if语句之间的currentLinePosition值发生变化是因为两个原因:

  • 在测试这个问题时,我确保线的位置永远不会与键的值相同

  • 调用函数之前所花费的时间是不同的(由于数据大小不同),因此每次在那个确切的时间更改行位置对我来说似乎是不太可能的


可能currentLinePosition的值(其中它==key)是在创建线程时捕获的,或者我真的不知道。有趣的是,尽管函数中的行位置值等于key,print()还是显示了主线程值。如果我发现一些与多线程相关的重要问题,我将在下面进行评论。

感谢@HugoTunius建议将多线程作为问题,并感谢其他人的意见

事实证明,将调用“AudioControllerdFinishLoadingAudioOrkey”的代码放到主线程上解决了我的问题。我不认为打印函数和if语句之间的currentLinePosition值发生变化是因为两个原因:

  • 在测试这个问题时,我确保线的位置永远不会与键的值相同

  • 调用函数之前所花费的时间是不同的(由于数据大小不同),因此每次在那个确切的时间更改行位置对我来说似乎是不太可能的


可能currentLinePosition的值(其中它==key)是在创建线程时捕获的,或者我真的不知道。有趣的是,尽管函数中的行位置值等于key,print()还是显示了主线程值。如果我发现与此问题相关的多线程处理很重要,我将在下面进行评论。

是否有可能是打印和比较之间的另一个线程更改了currentLinePosition的值?是否从此If语句调用了“playbackRecordingWithKey”,或者是从其他地方打来的电话?如果你仔细阅读这段代码,它会达到你期望的效果吗?我刚回来编辑我的帖子,是的,你完全正确,谢谢你这么快的回答!我将调用此函数的代码放在主线程上,解决了问题。@russell no这是唯一调用playbackRecordingWithKey的函数,谢谢!注意,我现在要更改它。为抬头的人干杯@EricD.是不是在打印和比较之间,currentLinePosition的值被另一个线程更改了?是从这个if语句调用“playbackRecordingWithKey”,还是从其他地方调用?如果你仔细阅读这段代码,它会达到你期望的效果吗?我刚回来编辑我的帖子,是的,你完全正确,谢谢你这么快的回答!我将调用此函数的代码放在主线程上,解决了问题。@russell no这是唯一调用playbackRecordingWithKey的函数,谢谢!注意,我现在要更改它。为抬头的人干杯@埃里克。
current line position
25
key
27
playbackRecordingWithKey