当前位置: 首页 > 知识库问答 >
问题:

为什么隐式展开选项需要在条件式中再次展开?

羊舌青青
2023-03-14

例如,我有这样的类,而不是在init方法中指定字段,我只想隐式地打开选项。

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

我理解这样做的原因是,当我声明它们时,它们的初始值为nil,因此我不需要init,因为所有类的字段都有初始值。我所需要做的就是确保在尝试访问它们之前为它们分配了一些内容,否则会出现致命错误。

假设我们给这些字段赋值,现在我们用某种方法,我想问的是:为什么我们需要在一个条件函数中使用bool来强制展开它?我可以访问其他隐式展开的选项,甚至是bool,而无需在条件之外这样做。

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

func buzz() {
  print(willBeSomeString)
}

我对此的最佳猜测是因为我们仍然可以在隐式展开的变量上检查nil,因此在条件的上下文中,它被视为只是一个普通的可选项,但就像我说的,这是我的最佳猜测,也许我错过了别的什么?

共有1个答案

夏宪
2023-03-14

当我们在一个有条件的系统中使用bool时,为什么我们需要强行打开它

这是一个历史问题。曾几何时,在Swift的早期,一个可选选项可以作为一种条件,用来询问它是否为nil。因此,你可能会认为,if willBeSomeBool是一个nil测试。因此,你要么显式地测试nil,要么展开测试,这样我们就有了一个真正的Bool,从而证明你知道自己在做什么,并防止你误解自己的结果。

可以这样看。您不能说if will Be某物字符串。您只能说更明确的东西,if will Be某物字符串==nilif will Be某物字符串=="howdy"。所以让will Be某物Bool遵守相同的模式是最简单的。

 类似资料:
  • 请原谅我的无知,我恐怕错过了一些基本的选项理解。我的印象是(隐式展开的可选指示符)保证该类型的变量不为零。然而,这个非常简单的Apple API很少会返回我。 这是一个意外的错误还是Optionals规范的一部分?因为如果这是规范的一部分,我不明白为什么会有选项,而不是变量可以存在或。

  • 我正在学习Swift,我对隐式展开选项有疑问。 我有一个返回字符串可选的函数: 以及执行安全展开的if语句,它使用隐式展开可选作为其常量: 在第一行中,apt按照应有的方式展开(结果窗格显示“404”),但在其他两行中,apt没有展开:结果窗格和控制台都显示打印的值是可选的(“404”)和找到的公寓:可选(“404”),为了让404出现在控制台上,我必须使用!符号,如果我理解正确,它只需要手动展开

  • 一开始我对强制展开和隐式展开非常困惑。现在,以下是我自学的体会: 没有可用于隐式展开的操作,但有一种称为隐式展开选项的东西。隐式展开选项和普通选项都是选项,区别在于当访问隐式展开选项时,您可以自信地知道引擎盖下有一个有效值并可供使用。如果让绑定或强制展开()操作,普通选项需要

  • 在编写一个新的swift类时,当(不)使用隐式展开选项而不仅仅是普通选项时,我仍然不是100%舒服。据我所知,如果你从来没有期望它的值为零,那么把它指定为隐式未包装(可选)应该是可以的。如果为nil,则为异常事件,应导致运行时错误。 例如,这个简单的登录视图包含两个text field成员变量: 在上面的类中,emailField和passField都被归类为隐式展开选项,因为我从来没有期望它们在

  • 在Swift 4.0中,以下代码不可编译: 现在我想象是

  • 问题内容: 为什么只创建一个正则变量或常量而不是创建一个“隐式展开的可选”?如果您知道可以成功解包,那么为什么首先要创建一个可选的?例如,为什么这样: 比以下内容更有用: 如果“可选参数指示允许常量或变量具有’无值’”,但“有时从程序的结构中可以看出,可选参数在首次设置该值后将始终具有一个值”,这是什么意思呢?首先使它成为可选项?如果您知道可选值总是会有一个值,那不是使它成为非可选值吗? 问题答案