swift中?和!

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,否则会引起程序崩溃

猜你喜欢

转载自blog.csdn.net/lu_ca/article/details/80248800