我只是想知道“?”之间有什么区别?和“!”在迅速,我是新手。我尝试在这里寻找类似的问题,但找不到任何问题。
答案 0 :(得分:3)
可选类型可以是nil
var nameOfToy: String?
玩具可能有名字;
nameOfToy = "Buzz"
所以
print (nameOfToy!)
是Buzz。
问号表示它是可选的,即可以是nil,所以你必须用它来UNWRAP它。这是因为变量是可选的。
但是如果没有玩具的名字会发生什么,并且你使用!在这种情况下,你会遇到一个令人讨厌的崩溃。
答案 1 :(得分:2)
这些字符具有不同的含义,具体取决于上下文。很可能你指的是他们在解包期权中的用途。
如果你有一个变量foo:
var foo: Int?
您已将变量声明为Optional
。 Optional
是一个可以包含某个值或不包含值的变量(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