Swift Optional ( 可選類型 ) 總結

一、Optional 定義歸納

(1).Swift中聲明一個變量或常量時需要返回nil。
(2).Swift中基礎類型如整型、布爾等可空時為nil。
(3).Swift中nil也代表一個值:空值。
(4).OC中的nil和Swift有一些需求,OC只有對象才能為nil。
(5).當我們需要定義一個可空的變量或常量時,Optional就發揮作用了,在 Swift中定于常量或變量時如果類型不是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");實際上我們需要使用的是Danny這個值,所以需要拆包得到
(2).拆包分為:顯式拆包和隱式拆包

1.顯式拆包

在我們事先聲明好的Optional類型名后面加( !)

//聲明
var name:String? = "Danny"
//顯式拆包
print(name!)

2.隱式拆包

當我們確定該變量一定會有值的時候在類型后面加( ! )

//確定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?難道要多次使用!拆包嗎?答案是肯定這種方法不可取的,下面這種方法表示只進行一次拆包。

var name:String? = "Danny"

if let letName = name {
    print(letName)
}else{
    print("nil")
}

說明:通過在條件判斷語句中把Optional值直接給一個臨時常量,Swift會自動檢測Optional是否包含值,如果包含值,會隱式的拆包并給那個臨時常量,在接下來的上下文中就能直接使用這個臨時常量了

四、Optional Chaining

可選鏈主要的應用場景是比較復雜的對方,如果一個對象中的屬性包含了一個對象,子對象中的屬性又包含了一個對象,這樣就形成了可選鏈,可空返回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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容