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