咱们在学习swift的时候常常会有各类的?和! 看了不少帖子而且使用程序员
其实 咱们的?和!的区别和使用大概就是:--------- 定义可选项使用“?“ 而 强行解包的时候用“!”,准备计算。swift
(1)原始的可选项定义:none没有值,或者some某一类值 let x:Optional = 10 xcode
(2)简单的可选项定义:用“?” 意思是可能没有值,也可能有一个值 let y:Int? = 40 函数
上面两个输出的值print(x) print(y)都是打印出这样Optional(10) 等等学习
(3)若是print(x+y)那么不一样类型之间不能够直接运算 若是nil不是任何数据类型 不能参与计算调试
(4)上面的第(2)条里的 若是赋值为nil那么在打印print(y)的时候会报错 found nil……意思是解包时候发现了nil值code
(5)程序员能够在解包的时候y!添加这个符号 意思是从可选值中强行获取对应的非空值,若是真的是nil 那么就会崩溃 io
程序少用!而且程序员要对!负责 由于一旦用了!那么运行的时候报错直接崩溃。而第(4)条的是编译时候就提示有错编译
另外还有一点是 用!和?的好处是程序不会在由于nil值得错误像oc里同样直接崩溃在main函数中了 这点是oc里的缺憾处。如今swift加以改进 从而在咱们调试的时候xcode编译就不会经过 就会提示为空 若是咱们非要加上!那么就会在编译经过可是运行报错数据类型
let的可选值没有默认值 var的可选值默认为nil