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

一、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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末站欺,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子纤垂,更是在濱河造成了極大的恐慌矾策,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件峭沦,死亡現(xiàn)場離奇詭異贾虽,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)熙侍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進(jìn)店門榄鉴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蛉抓,你說我怎么就攤上這事庆尘。” “怎么了巷送?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵驶忌,是天一觀的道長。 經(jīng)常有香客問我,道長付魔,這世上最難降的妖魔是什么聊品? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮几苍,結(jié)果婚禮上翻屈,老公的妹妹穿的比我還像新娘。我一直安慰自己妻坝,他們只是感情好伸眶,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著刽宪,像睡著了一般厘贼。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上圣拄,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天嘴秸,我揣著相機(jī)與錄音,去河邊找鬼庇谆。 笑死岳掐,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的饭耳。 我是一名探鬼主播岩四,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼哥攘!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起材鹦,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤逝淹,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后桶唐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體栅葡,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年尤泽,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了欣簇。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,566評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡坯约,死狀恐怖熊咽,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情闹丐,我是刑警寧澤横殴,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站卿拴,受9級特大地震影響衫仑,放射性物質(zhì)發(fā)生泄漏梨与。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一文狱、第九天 我趴在偏房一處隱蔽的房頂上張望粥鞋。 院中可真熱鬧,春花似錦瞄崇、人聲如沸呻粹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽尚猿。三九已至,卻和暖如春楣富,著一層夾襖步出監(jiān)牢的瞬間凿掂,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工纹蝴, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留庄萎,地道東北人。 一個月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓塘安,卻偏偏與公主長得像糠涛,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子兼犯,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評論 2 348

推薦閱讀更多精彩內(nèi)容