Swift Optional ( 可選類型 ) 總結(jié)

一、Optional 定義歸納

(1).Swift中聲明一個(gè)變量或常量時(shí)需要返回nil。
(2).Swift中基礎(chǔ)類型如整型、布爾等可空時(shí)為nil。
(3).Swift中nil也代表一個(gè)值:空值。
(4).OC中的nil和Swift有一些需求,OC只有對象才能為nil。
(5).當(dāng)我們需要定義一個(gè)可空的變量或常量時(shí),Optional就發(fā)揮作用了,在 Swift中定于常量或變量時(shí)如果類型不是Optional是不能為nil的。

二、Optional 聲明

**定義可選類型只需要在類型后面加上 ( ? ) **
有以下幾種聲明方法:

//1.使用Optional聲明(可選類型是一個(gè)枚舉)
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這個(gè)值,所以需要拆包得到
(2).拆包分為:顯式拆包和隱式拆包

1.顯式拆包

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

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

2.隱式拆包

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

//確定name一定會有值
var name:String!= "Danny"

四、Optional Binding

(1).判斷一個(gè)可選類型是否為nil,通常寫法是下面這種

var name:String? = "Danny"

if name != nil {
    print("not nil")
}else{
    print("nil")
}

(2).判斷一個(gè)可選類型是否為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值直接給一個(gè)臨時(shí)常量,Swift會自動(dòng)檢測Optional是否包含值,如果包含值,會隱式的拆包并給那個(gè)臨時(shí)常量,在接下來的上下文中就能直接使用這個(gè)臨時(shí)常量了

四、Optional Chaining

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

注意:整條鏈上只要有一個(gè)Optional返回nil,則整條鏈都為nil

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容