比方说,我有这样的类,而不是在init
方法中创建我将分配给我的字段,我只想隐式解包选项。
class foo {
willBeSomeBool: Bool!
willBeSomeString: String!
}
我理解这样做的原因是,当我声明它们时,它们的初始值为nil
,因此我不需要init
作为所有课程&#39 ; s字段具有初始值。我需要做的就是确保在尝试访问它们之前给它们分配一些东西,否则我会得到一个致命的错误。
所以说我们已经为这些领域赋予了价值,现在我们采用了某种方法,我要问的是:为什么我们需要在条件中使用它时强行打开bool ?我可以访问其他隐式解包的选项,甚至可以访问bool而不在条件之外这样做。
func bar() {
if willBeSomeBool! {
...
}
}
func buzz() {
print(willBeSomeString)
}
我最好的猜测是因为我们仍然可以在隐式展开的变量上检查nil,所以在条件的上下文中它被视为只是一个普通的可选项,但就像我说的那样我最好的猜猜,也许我错过了其他的东西?
答案 0 :(得分:3)
为什么我们在条件
中使用boo时需要强行打开bool
这是一个历史问题。曾几何时,在Swift的早期,可以使用Optional作为一种条件来询问它是否为nil
。因此,您可能可能认为if willBeSomeBool
是nil
测试。因此,您必须明确地测试nil
或解包,以便我们拥有一个真正的Bool,从而证明您知道自己在做什么 - 并防止您误解自己的结果。
以这种方式看待它。你不能说if willBeSomeString
。您只能说明一些更明确的内容,if willBeSomeString == nil
或if willBeSomeString == "howdy"
。因此,最简单的方法是使willBeSomeBool
服从相同的模式。