所以我一直在Swift中开发一个应用程序,今天我花了近一个小时来调试一个完全出乎意料的问题。这一切都来自下面的代码。
if (hero.isAI) { //isAI is a Bool
}
问题是这个if语句总是返回true。所以我想也许我在某处将isAI设置为true但最后我意识到我将isAI声明为可选类型,如下所示。
var isAI: Bool!
什么时候应该
var isAI: Bool
这导致if语句不检查isAI是否为真,而是检查它是否包含值。
所以为了安全起见,我确保写下这样的if-statments
if (hero.isAI == true) { //isAI is a Bool
}
所以我的问题是, 有什么方法可以避免将来出现这个问题? (这个问题似乎非常危险,特别是在大型项目团队工作时)。 我是否应该明确地写出我的if-statment,我应该完全避免Bools的可选类型吗?
请注意,我在Xcode Beta 2中没有遇到此问题。当我升级到Xcode beta 3时出现了这个问题。我认为因为在Beta 2中Apple通过检查其值而不是检查它是否在if语句中处理了隐式解包的Bool包含一个值。
最后,下面是一个示例,其中if-statements运行给定一个可选的Bool,以更好地帮助人们理解问题。
let myBool: Bool! = false
if (myBool) {
//Runs
}
if (myBool!) {
//Won't Run
}
if (!myBool) {
//Runs
}
if (myBool == true) {
//Won't Run
}