网上有关“Swift中 !和 ?”话题很是火热,小编也是针对Swift中 !和 ?寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。
相信大家在学习和使用Swift的时候,肯定会被 ! 和 ? 搞疯过, 纠结这两个符号到底是个什么鬼 ?鬼知道什么时候使用 ! ,什么时候使用 ?
下面就说一下 ! 和 ? 区别以及该怎么使用!
? 和 ! 其实分别是Swift语言中对一种可选类型( Optional) 操作的语法糖。
那可选类型是干什么的呢? Swift中是可以声明一个没有初始值的属性, Swift中引入了可选类型(Optional)来解决这一问题。它的定义是通过在类型声明后加一个 ? 操作符完成的。
例如: var name: String?
Optional 其实是个 enum ,里面有 None 和 Some 两种类型。其实所谓的nil就是 Optional.None , 非nil就是 Optional.Some , 然后会通过 Some(T) 包装(wrap)原始值,这也是为什么在使用 Optional 的时候要拆包(从 enum 里取出来原始值)的原因。这里是enum Optional的定义
既然这样, 那对于 var name: String? 该怎样去理解这句语法呢?
一旦声明为 Optional 的,如果不显式的赋值就会有个默认值 nil 。判断一个 Optional 的值是否有值,可以用if来判断:
怎么使用 Optional 值呢?文档中也有提到说,在使用 Optional 值的时候需要在具体的操作,比如调用方法、属性、下标索引等前面需要加上一个 ? ,如果是 nil 值,也就是 Optional.None ,会跳过后面的操作不执行,如果有值,就是 Optional.Some ,可能就会拆包(unwrap),然后对拆包后的值执行后面的操作,来保证执行这个操作的安全性。
? 的使用场景:
1.声明 Optional 值变量
2.用在对 Optional 值操作中,用来判断是否能响应后面的操作
3.使用 as? 向下转型(Downcast)
上面提到 Optional 值需要拆包(unwrap)后才能得到原来值,然后才能对其操作,那怎么来拆包呢?
拆包有两种方法:
其实, 还有一种叫隐式拆包(Implicitly Unwrapped Optionals),比如 对于会在viewDidLoad进行初始化的变量,可以直接定义为 var str :String! 等于说你每次对这种类型的值操作时,都会自动在操作前补上一个 ! 进行拆包,然后在执行后面的操作,当然如果该值是nil,会报错crash掉。
举个很浅显的栗子:
! 的使用场景:
1.强制对 Optional 值进行拆包(unwrap)
2.声明隐式拆包变量,一般用于类中的属性
其实 ! 和 ? 的问题是很坑的,不要看它仅仅是两个符号,因为只要有一个不小心,不注意,你会发现项目运行起来,会莫名的crash掉了,关键是Debug模式也不是很方便定位错误类型。 自己整理一下关于 可选类型的相关使用,一是记录和巩固所学,而是希望会对大家有所帮助。 本文可能会有错误和不妥之处,还望提出,我会及时改正。
关于“Swift中 !和 ?”这个话题的介绍,今天小编就给大家分享完了,如果对你有所帮助请保持对本站的关注!
本文来自作者[幻柏]投稿,不代表鸡脖创新立场,如若转载,请注明出处:https://jcjybjb.com/jb/3250.html
评论列表(4条)
我是鸡脖创新的签约作者“幻柏”!
希望本篇文章《Swift中 !和 ?》能对你有所帮助!
本站[鸡脖创新]内容主要涵盖:生活百科,小常识,生活小窍门,知识分享
本文概览:网上有关“Swift中 !和 ?”话题很是火热,小编也是针对Swift中 !和 ?寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。 相信...