1,as ?:把一个不确定存在的类型转成可选类型
- 当取值时,如果结果不确定是否存在(比如通过一个键值从字典中取值),可以用as ?把结果转换成可选类型,然后使用结果的时候解包使用,结果不存在,也不会崩溃,而是把结果赋值nil
- 字典取值默认就是使用了as ?进行了结果转换成可选类型
let dict:[String : Any] = ["name":"zhang","age":20,"num":200]
let name01 = dict["aaa"] //字典取值默认是使用了as?转换的,所以这里可以简单的写成dict["aaa"]
print(name01 ?? "没有结果")
2,*as ! *:把一个可选类型转换成固定类型
- 当取值时, 如果结果确定是存在的(比如通过一个键值从字典中取值),可以直接赋值一个确定类型,如果是一个系统默认的可选类型,也可以通过as !强制解包赋值确定类型,如下:
- 如果一个确定类型被系统指定成了可选类型,每次使用都要解包,比较麻烦,所以我们可以在取值的时候一次性进行解包,之后使用可以直接使用:
let dict:[String : Any] = ["name":"zhang","age":20,"num":200]
let name01 = dict["age"] //
print(name01)
//打印结果是可选类型哦,Optional(20),所以每次使用这个值的时候都需要解包,如果我们确定这个值是某一固定类型,可以直接在取值的时候用as!进行强制解包
let dict:[String : Any] = ["name":"zhang","age":20,"num":200]
let name01 = dict["age"] as! Int
print(name01)//打印结果是20
3,?? <#default value#>:把一个可选类型进行高级可选绑定解包
- 当一个可选类型不存在时候,赋值default value
- 当一个可选类型存在的时候,进行解包
let dict:[String : Any] = ["name":"zhang","age":20,"num":200]
let name01 = dict["bbb"]
print(name01 ?? "结果不存在")//打印结果是“结果不存在”
4, optional("xxxxx"):可选类型的包装,一般没什么实际用途
5 ,可选绑定:把一个可选类型理性解包
- 当一个结果是可选类型的时候,因为有包装optional("xxxxx"),所以是不能直接使用的,所以可以通过可选绑定进行正确解包后使用‘
- 如果结果有值,则赋值
- 如果结果没值,则直接返回,不做任何操作,而?? <#default value#>在结果无值的时候还会赋值一个默认值,所以说是可选绑定的高级操作
let dict:[String : Any] = ["name":"zhang","age":20,"num":200]
let name01 = dict["name"]
if let name01 = name01 {
print(name01)//打印结果是“zhang”
}
let dict:[String : Any] = ["name":"zhang","age":20,"num":200]
let name01 = dict["dddd"]
if let name01 = name01 {
print(name01)//没有打印,不做任何操作
}