例如,我有这样的类,而不是在init
方法中指定字段,我只想隐式地打开选项。
class foo {
willBeSomeBool: Bool!
willBeSomeString: String!
}
我理解这样做的原因是,当我声明它们时,它们的初始值为nil
,因此我不需要init
,因为所有类的字段都有初始值。我所需要做的就是确保在尝试访问它们之前为它们分配了一些内容,否则会出现致命错误。
假设我们给这些字段赋值,现在我们用某种方法,我想问的是:为什么我们需要在一个条件函数中使用bool来强制展开它?我可以访问其他隐式展开的选项,甚至是bool,而无需在条件之外这样做。
func bar() {
if willBeSomeBool! {
...
}
}
func buzz() {
print(willBeSomeString)
}
我对此的最佳猜测是因为我们仍然可以在隐式展开的变量上检查nil,因此在条件的上下文中,它被视为只是一个普通的可选项,但就像我说的,这是我的最佳猜测,也许我错过了别的什么?
当我们在一个有条件的系统中使用bool时,为什么我们需要强行打开它
这是一个历史问题。曾几何时,在Swift的早期,一个可选选项可以作为一种条件,用来询问它是否为nil
。因此,你可能会认为,if willBeSomeBool
是一个nil
测试。因此,你要么显式地测试nil
,要么展开测试,这样我们就有了一个真正的Bool,从而证明你知道自己在做什么,并防止你误解自己的结果。
可以这样看。您不能说if will Be某物字符串
。您只能说更明确的东西,if will Be某物字符串==nil
或if 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中,以下代码不可编译: 现在我想象是
问题内容: 为什么只创建一个正则变量或常量而不是创建一个“隐式展开的可选”?如果您知道可以成功解包,那么为什么首先要创建一个可选的?例如,为什么这样: 比以下内容更有用: 如果“可选参数指示允许常量或变量具有’无值’”,但“有时从程序的结构中可以看出,可选参数在首次设置该值后将始终具有一个值”,这是什么意思呢?首先使它成为可选项?如果您知道可选值总是会有一个值,那不是使它成为非可选值吗? 问题答案