swift已经更新到4.0了,苹果也逐步重视起来,这就逼着你去了解这个语言。看着通篇的? 、!以及??,说实话有点晕。。。
?其实就是swift的一种新的类型,这个类型是一个可选类型(optional)。这个标志表示我定义一个变量为可选类型的。例如
let num:Int?
这个可选类型就是表示,我生明了一个类型如果有值就为Int类型的,如果没有值那么就是nil。所以说我并没有声明变量num为Int类型,而是可选类型的,可能是Int也可能是nil。
当我对num显式赋值时
let num:Int? = 3
那么num就是Int类型,当我没有对num显式赋值,那么num为nil类型
如果想要操作一个optional类型的变量,需要先进行解包,然后才能操作,这时就用到了!
!表示强解包,在使用的时候要注意,如果有值就会得到变量的值,如果为nil那么程序会crash
例如
// 定义一个string的可选类型str,显式赋值 var str: String? = "Hello"
if str{ let message = "你好" + str! print(message)
}
因为已经给str赋值为hello,所以if判断条件成立,然后给name强解包,得到hello
同样
// 定义一个string的可选类型str,但是没有显式赋值 var str: String? let message = "你好" + str! print(message)
强解包程序会crash掉
所以在使用!强解包的时候一定要确定解包对象不为nil,否则会引起程序崩溃