为什么隐式解包的选项需要在条件句中再次解包?

时间:2016-03-14 21:51:49

标签: swift

比方说,我有这样的类,而不是在init方法中创建我将分配给我的字段,我只想隐式解包选项。

class foo {
  willBeSomeBool: Bool!
  willBeSomeString: String!
}

我理解这样做的原因是,当我声明它们时,它们的初始值为nil,因此我不需要init作为所有课程&#39 ; s字段具有初始值。我需要做的就是确保在尝试访问它们之前给它们分配一些东西,否则我会得到一个致命的错误。

所以说我们已经为这些领域赋予了价值,现在我们采用了某种方法,我要问的是:为什么我们需要在条件中使用它时强行打开bool ?我可以访问其他隐式解包的选项,甚至可以访问bool而不在条件之外这样做。

func bar() {
  if willBeSomeBool! {
    ...
  }
}

func buzz() {
  print(willBeSomeString)
}

我最好的猜测是因为我们仍然可以在隐式展开的变量上检查nil,所以在条件的上下文中它被视为只是一个普通的可选项,但就像我说的那样我最好的猜猜,也许我错过了其他的东西?

1 个答案:

答案 0 :(得分:3)

  

为什么我们在条件

中使用boo时需要强行打开bool

这是一个历史问题。曾几何时,在Swift的早期,可以使用Optional作为一种条件来询问它是否为nil。因此,您可能可能认为if willBeSomeBoolnil测试。因此,您必须明确地测试nil或解包,以便我们拥有一个真正的Bool,从而证明您知道自己在做什么 - 并防止您误解自己的结果。

以这种方式看待它。你不能说if willBeSomeString。您只能说明一些更明确的内容,if willBeSomeString == nilif willBeSomeString == "howdy"。因此,最简单的方法是使willBeSomeBool服从相同的模式。