“?”之间有什么区别?和“!”运营商在swift?

时间:2018-04-24 01:36:56

标签: swift swift4

我只是想知道“?”之间有什么区别?和“!”在迅速,我是新手。我尝试在这里寻找类似的问题,但找不到任何问题。

3 个答案:

答案 0 :(得分:3)

可选类型可以是nil

var nameOfToy: String?

玩具可能有名字;

nameOfToy = "Buzz"

所以

print (nameOfToy!)

是Buzz。

问号表示它是可选的,即可以是nil,所以你必须用它来UNWRAP它。这是因为变量是可选的。

但是如果没有玩具的名字会发生什么,并且你使用!在这种情况下,你会遇到一个令人讨厌的崩溃。

答案 1 :(得分:2)

这些字符具有不同的含义,具体取决于上下文。很可能你指的是他们在解包期权中的用途。

如果你有一个变量foo:

var foo: Int?

您已将变量声明为OptionalOptional是一个可以包含某个值或不包含值的变量(nil。)将Optional视为另一个数据类型的框或包装器。为了获得可选内部的值,你必须打开它。

问号是解包操作符。

假设您有一个更复杂的对象,如结构:

struct Foo {
  bar: Int
}

var aFoo: Foo?

您已经创建了一个名为aFoo的Foo可选实例。变量aFoo包含一个Foo对象,或者它包含nil。

你可以使用这样的代码:

if aFoo?.bar == 3 {
   print("aFoo contains an int == 3")
} else {
   print("aFoo is either nil or contains some other value")
}

!运算符是"强制解包"运营商。如果没有"我称之为"崩溃运营商。如果你使用force-unwap重写上面的代码:

if aFoo!.bar == 3 {
   print("aFoo contains an int == 3")
}

然后有一个else子句是没有意义的,因为如果aFoo是nil,你肯定会崩溃。

如果您某些 Optional不是零,则只应使用强制解包运算符。

选项是Swift中一个非常重要的概念,所以你应该研究它们,以及处理它们的各种方法,直到它成为第二天性。

确保您了解"可选链接","可选绑定",nil合并运算符,保护语句和强制解包,列举一些处理选项的技巧。

答案 2 :(得分:0)

“要声明一个可选项,我们只需要在类型名称后面添加一个问号。要读取可选项的值,我们必须通过在名称末尾添加一个感叹号来解开它。” p>

“声明隐式展开的选项”

“Swift提供了声明隐式解包的选项的可能性。这些是使用感叹号而不是问号声明的可选变量。系统将这些变量作为选项读取,直到它们被赋值为止,因此我们不必再打开它们了。“

routing in  Laravel