晚上十一点半了,看书累了,原本想睡了的,想了想,还是把刚看的总结一下,把这篇笔记写了吧。广州下雨,真特么的冷。。好了,废话不说了,说正题说说Swift可选类型。
先定义一个变量:
var string="zhangxu"
想想这个变量要强转成 Int 类型的会怎样?
// var Zint: int = string.toint() 这样子肯定是不行的,没发转换成 Int 类型的,那有没有想过 Zint 的值会是什么呢? 这时候我们今天的主角,可选类型就登场了!
var Zint : int? = string.toint()
这句代码就描述的是可选类型, 所以 Zint 的类型不是 int 类型的,切记!它是 int?(可选类型)
那这个Zint的值会是什么呢,int?与int 的不同点我们知道了,也就明白了!
int? 可选类型,它能接受到的值得类型有两种。int 型 与 nil 值,这里的 nil 中的 nil 完全不是同一个概念,待会我们阐述!
int 型却只能接受 int 型的值,不能接受 nil 值!
所以,上面那个问题的答案我们也就知道了,Zint 的 值 是nil ,因为上面的强转是不会成立的。 而 Zint 的类型确实是 int? 类型,它能接受nil 值,所以它的值是 nil
这就是第一点,可选类型!
有了可选类型,也就随之强制解析了(最重要的一点,只有可选类型,才能解析!!!) 接着以前面的Zint为例:
我再定义一个变量
// var ZX:int = Zint 这里会编译错误的。原因就是Zint的值为nil ,前面说了int 不接受nil值
看下面的代码:
var ZX:String?=@"123456789" // var Z:String = ZX 这里错误的原因是他们的类型不一样,大家琢磨一下!
但我这样写
var Z:String = ZX!
这样写是没有问题的,但还是不严谨!这里的ZX!就是做了解析的处理,他就是为了获取 ZX 这个变量确实存在的值!没有值是解析失败,在运行的时候报错的,所以说这里写的不严谨,我们严谨一点因该这样子写
if ZX != nil{ var Z:String = ZX! }
最后一点了,说说隐式可选类型 ,先说一点,前面我们说的在类型后面加 ? 的其实就是显式的。
看下面:
var ZX : String!="12345678" var Z: String = ZX
首先说明这样子写是没有问题的! 在后面加 !号,就是我们说的隐式可选类型,其特点大家知道了,也就不难理解为什么那样子写是可以的,因为加了 ! 之后Swift会自己进行隐式的解析!就这么简单的一句话,它自己解析了!!既然解析了,就可以直接赋值给变量 Z 了,也就不觉得奇怪了,因为我们知道可选类型要赋值给不可选的类型的时候必须必须要进行解析!!!
就这样子先,明天还要上班,睡觉吧,十二点半了。。明天加油!晚安张小旭!