一、Optional 定義歸納
(1).Swift中聲明一個變量或常量時(shí)需要返回nil胜茧。
(2).Swift中基礎(chǔ)類型如整型、布爾等可空時(shí)為nil。
(3).Swift中nil也代表一個值:空值亏推。
(4).OC中的nil和Swift有一些需求,OC只有對象才能為nil年堆。
(5).當(dāng)我們需要定義一個可空的變量或常量時(shí)吞杭,Optional就發(fā)揮作用了,在 Swift中定于常量或變量時(shí)如果類型不是Optional是不能為nil的变丧。
二芽狗、Optional 聲明
**定義可選類型只需要在類型后面加上 ( ? ) **
有以下幾種聲明方法:
//1.使用Optional聲明(可選類型是一個枚舉)
var name:Optional<String>
//1.賦值
name = Optional("Danny")
//2.常用聲明
var age:Int?
//2.賦值
age = 17
//3.常量聲明
let notes:NSString?
//3.賦值(常量只能賦一次值)
notes = "this is test"
三、Optional 拆包
(1).為什么我們要對Optional拆包
申明為Optional后痒蓬,不拆包的格式是被Optional包住的:Optional("Danny");實(shí)際上我們需要使用的是Danny這個值童擎,所以需要拆包得到
(2).拆包分為:顯式拆包和隱式拆包
1.顯式拆包
在我們事先聲明好的Optional類型名后面加( 滴劲!)
//聲明
var name:String? = "Danny"
//顯式拆包
print(name!)
2.隱式拆包
當(dāng)我們確定該變量一定會有值的時(shí)候在類型后面加( ! )
//確定name一定會有值
var name:String!= "Danny"
四、Optional Binding
(1).判斷一個可選類型是否為nil柔昼,通常寫法是下面這種
var name:String? = "Danny"
if name != nil {
print("not nil")
}else{
print("nil")
}
(2).判斷一個可選類型是否為nil并且我們需要使用該可選類型怎么辦呢哑芹?
var name:String? = "Danny"
if name != nil {
print(name!) //使用 !拆包
}else{
print("nil")
}
(3).接上(2)如果我們需要使用多次使用到name捕透?難道要多次使用聪姿!拆包嗎?答案是肯定這種方法不可取的乙嘀,下面這種方法表示只進(jìn)行一次拆包末购。
var name:String? = "Danny"
if let letName = name {
print(letName)
}else{
print("nil")
}
說明:通過在條件判斷語句中把Optional值直接給一個臨時(shí)常量,Swift會自動檢測Optional是否包含值虎谢,如果包含值盟榴,會隱式的拆包并給那個臨時(shí)常量,在接下來的上下文中就能直接使用這個臨時(shí)常量了
四婴噩、Optional Chaining
可選鏈主要的應(yīng)用場景是比較復(fù)雜的對方擎场,如果一個對象中的屬性包含了一個對象,子對象中的屬性又包含了一個對象几莽,這樣就形成了可選鏈迅办,可空返回nil。
class Person {
var myPet:Dog?
}
class Dog{
var myToy:Toy?
}
class Toy {
var name = "name"
init(name:String){
self.name = name;
}
}
let denny = Person();
denny.myPet = Dog();
denny.myPet?.myToy = Toy(name: "Ball")
if let toy = denny.myPet?.myToy{
toy.name
}
注意:整條鏈上只要有一個Optional返回nil章蚣,則整條鏈都為nil