我面临以下问题:
我正在执行一个代码,其中swift必须检查这两个bool是否不同isVisible
和visible
。值不同,但是当我打印print(isVisible != visible)
时,它会给我false
。我调试了代码行,当我执行po isVisible != visible
时,它会给我true
。
我正在使用的代码:
func setTabbarVisible(_ visible: Bool) {
guard let tabBar = tabBarController?.tabBar else {
return
}
let anchorPoint = UIScreen.main.bounds.height - tabBar.frame.size.height
let isVisible = (tabBar.frame.origin.y == anchorPoint)
print("SUUU")
print(isVisible != visible)
if isVisible != visible {
UIView.animate(withDuration: kAnimationDuration, animations: {
if visible {
tabBar.frame = CGRect(x: tabBar.frame.origin.x, y: anchorPoint, width: tabBar.frame.size.width, height: tabBar.frame.size.height)
tabBar.alpha = kBarsAlpha
} else {
tabBar.frame = CGRect(x: tabBar.frame.origin.x, y: UIScreen.main.bounds.height, width: tabBar.frame.size.width, height: tabBar.frame.size.height)
tabBar.alpha = 0
}
})
}
}
我的调试终端:
正如我们所看到的,当我停止程序时,值是不同的,条件是真的,但是当我打印值或if语句评估时,条件给我错误。 (我试图在打印之前停止它,在if之前和当我停止它时,值总是相同的,所以它不能是因为并发)。
答案 0 :(得分:0)
固定!
如果我将代码包装在DispatchQueue.main.async {}
中,它可以正常工作。
但是我不明白为什么会发生这种情况,因为它在主线程中执行之前也是如此:
在使用DispatchQueue.main.async {}
打包之前:
包装后:
当我打印isVisible
和visible
的值时,它返回true,但是当我调试它们时(在打印变量之后但在打印isVisible != visible
之前)声明它给了我不同的价值观。)
print( "print isVisible \(isVisible)")
print ( "print visible \(visible)")
print(( "print isVisible != visible \(isVisible != visible)"))
if isVisible != visible {
输出: