if如果Int的比较值不相等则执行块(Swift)

时间:2016-02-29 14:25:54

标签: ios swift debugging if-statement

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)
            }

        })
    }
}

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

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

current line position
25
key
27
playbackRecordingWithKey

但" playbackRecordingWithKey"仍然被调用(那里也有打印功能)

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

1 个答案:

答案 0 :(得分:0)

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

结果表明,调用' audioControllerDidFinishLoadingAudioForKey'到主线程修复了我的问题。我不认为currentLinePosition值在print函数和if语句之间发生了变化,原因有以下两点:

  • 测试问题时,我确保行位置与键的值不相同。

  • 调用函数之前所花费的时间会有所不同(由于数据大小不同),因此每次在该确切时间更改行位置似乎不太可能。

也许在创建线程时捕获了currentLinePosition(其中= = key)的值,我真的不知道。虽然有趣但尽管函数中的行位置值等于key,print()显示主线程值。如果我找到与此问题相关的多线程重要事项,我将在下面发表评论。