Swift_? 和 ! 的使用场景

?的几种使用场景:

1.声明Optional值变量
2.用在对Optional值操作中,用来判断是否能响应后面的操作
3.用于安全调用protocol的optional方法
4.使用 as? 向下转型(Downcast)


理解:

? .在使用Optional值的时候需要在具体的操作,比如调用方法、属性、下标索引等前面需要加上一个?(同上面的2), 如果是nil值,会跳过后面的操作不执行 / 如果有值,就会拆包(unwrap),然后对拆包后的值执行后面的操作,来保证执行这个操作的安全性,比如:
let hashValue = strValue?.hashValue
strValue是Optional的字符串,如果strValue是nil,则hashValue也为nil,如果strValue不为nil,hashValue就是strValue字符串的哈希值(其实也是用Optional wrap后的值)

!.在使用时, 表示自动解包, 自己不会去判断有没有值, 直接解包, 这样会发生什么?
答: strValue不小心为nil的话,就会出错,crash掉。
let hashValue = strValue!.hashValue
假设我们知道strValue一定是非nil的,就能直接加上!,强制拆包(unwrap)并执行后面的操作。
当然我们可以在使用之前手动添加判断

if strValue {
  let hashValue = strValue!.hashValue
}```

###!大概也有两种使用场景
1.强制对Optional值进行拆包(unwrap)
2.声明Implicitly Unwrapped Optionals值,一般用于类中的属性
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容