第三十篇:Swift枚舉 & Optional

swift中的枚舉可以用復雜的類型如下见间,關聯(lián)值:


8521670676493_.pic.jpg

在Swift中進行枚舉布局的時候一直是嘗試使用最少的空間來存儲enum前计,對于當前的case數量來說供搀,UInt8能夠表示256cases楚午,也就意味著如果一個默認枚舉類型且沒有關聯(lián)值的case少于256,當前枚舉類型的大小都是1字節(jié)含长。

8531670677878_.pic.jpg

indirect 關鍵字的使用

indirect作用就是把后面的BinaryTree分配到堆空間里:這個關鍵字一般用在遞歸里券腔。

8541670683985_.pic.jpg

Optional可選型

之前我們在寫代碼的過程中早就接觸過可選型,比如我們在代碼這樣定義:

8591670753659_.pic.jpg

當前的age我們就稱之為可選值茎芋,當然可選值的寫法這兩者是等同的颅眶。

8601670753711_.pic.jpg

對于Optional的本質是什么?我們直接跳轉到源碼田弥,打開Optional.swift文件涛酗,其就是一個枚舉。

8611670754063_.pic.jpg

可選鏈

我們都知道在OC中我們給一個nil對象發(fā)送消息什么也不會發(fā)生偷厦,swift中我們是沒有辦法向一個nil對象直接發(fā)送消息商叹,但是借助可選鏈可以達到類似的效果。

可選鏈就是如下只泼,當其無初始值時候也不會報錯

8621670756235_.pic.jpg

同樣的可選鏈對于下標和函數調用也適用

如下:

8631670756728_.pic.jpg

??運算符(空合并運算符)

(a ?? b)將對可選類型 a 進行空判斷剖笙,如果a包含一個值就進行解包,否則就返回一個默認值b请唱。
1)表達式 a 必須是 Optional類型
2)默認值 b 的類型必須要和a存儲值的類型保持一致

運算符重載

在源碼中我們可以看到除了重載了 ?? 運算符弥咪,Optional類型還重載了 ==,?=等等運算符十绑,實際開發(fā)中我們可以通過重載運算符簡化我們的表達式聚至,下面是重載定義了---符號。

image.png

隱式解析可選類型

隱式解析可選類型是可選類型的一種本橙,使用的過程中和非可選類型無異扳躬。它們之間唯一的區(qū)別是,隱式解析可選類型是你告訴對Swift編譯器甚亭,我在運行時訪問時贷币,值不會為nil。如果為nil的話回閃退亏狰。

var age:Int
var age1: Int R畚啤(這個age1已經隱式解包)

其實日常開發(fā)中我們比較常見這種隱士解析可選類型

8641670768126_.pic.jpg

IBOutlet類型時Xcode強制為可選類型的,因為它不是在初始化時賦值的骚揍,而是在加載視圖的時候字管。你可以把設置為普通可選類型,但是如果這個視圖加載正確信不,它是不會為空的嘲叔。

與可選值有關的高階函數

1)map:這個方法接受一個閉包,如果可選值有內容則調用這個閉包進行轉換

8651670769569_.pic.jpg

上面的代碼中我們從字典中取出字符串“1”抽活,并將其轉換為int類型硫戈,但因為String轉換成int不一定成功,所以返回的是int下硕?類型丁逝,而且字典通過鍵不一定能取得到值汁胆,所以map返回的也是一個Optional,所以最后上述代碼result的類型為int??類型霜幼。

那么如何把我們的雙重可選展平開來嫩码,這個時候我們就需要使用到

1)flatMap:可以把結果展平成為單個可選值 (下面用了Int(S0)把其轉換成了int類型)

8661670769894_.pic.jpg

2)注意,這個方法是作用在Optinal的方法罪既,而不是作用在Sequence上的

3)作用在Sequence上的flatMap方法在Swift4.1中被更名為compactMap铸题。該方法可以將序列中的nil過濾出去。

8671670770246_.pic.jpg

元類型琢感,AnyClass丢间,Self (self)

1)AnyObject:代表任意類的 instance,類的類型驹针,僅類遵守的協(xié)議烘挫。
2)Any:代表任意類型,包括funcation類型或者 Optional類型
3)AnyClass :代表任意實例的類型

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末柬甥,一起剝皮案震驚了整個濱河市饮六,隨后出現的幾起案子,更是在濱河造成了極大的恐慌苛蒲,老刑警劉巖喜滨,帶你破解...
    沈念sama閱讀 222,807評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異撤防,居然都是意外死亡,警方通過查閱死者的電腦和手機棒口,發(fā)現死者居然都...
    沈念sama閱讀 95,284評論 3 399
  • 文/潘曉璐 我一進店門寄月,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人无牵,你說我怎么就攤上這事漾肮。” “怎么了茎毁?”我有些...
    開封第一講書人閱讀 169,589評論 0 363
  • 文/不壞的土叔 我叫張陵克懊,是天一觀的道長。 經常有香客問我七蜘,道長谭溉,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,188評論 1 300
  • 正文 為了忘掉前任橡卤,我火速辦了婚禮扮念,結果婚禮上,老公的妹妹穿的比我還像新娘碧库。我一直安慰自己柜与,他們只是感情好巧勤,可當我...
    茶點故事閱讀 69,185評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著弄匕,像睡著了一般颅悉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上迁匠,一...
    開封第一講書人閱讀 52,785評論 1 314
  • 那天剩瓶,我揣著相機與錄音,去河邊找鬼柒瓣。 笑死儒搭,一個胖子當著我的面吹牛,可吹牛的內容都是我干的芙贫。 我是一名探鬼主播搂鲫,決...
    沈念sama閱讀 41,220評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼磺平!你這毒婦竟也來了魂仍?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 40,167評論 0 277
  • 序言:老撾萬榮一對情侶失蹤拣挪,失蹤者是張志新(化名)和其女友劉穎擦酌,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體菠劝,經...
    沈念sama閱讀 46,698評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡赊舶,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,767評論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了赶诊。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片笼平。...
    茶點故事閱讀 40,912評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖舔痪,靈堂內的尸體忽然破棺而出寓调,到底是詐尸還是另有隱情,我是刑警寧澤锄码,帶...
    沈念sama閱讀 36,572評論 5 351
  • 正文 年R本政府宣布夺英,位于F島的核電站,受9級特大地震影響滋捶,放射性物質發(fā)生泄漏痛悯。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,254評論 3 336
  • 文/蒙蒙 一炬太、第九天 我趴在偏房一處隱蔽的房頂上張望灸蟆。 院中可真熱鬧,春花似錦、人聲如沸炒考。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,746評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽斋枢。三九已至帘靡,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間瓤帚,已是汗流浹背描姚。 一陣腳步聲響...
    開封第一講書人閱讀 33,859評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留戈次,地道東北人轩勘。 一個月前我還...
    沈念sama閱讀 49,359評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像怯邪,于是被迫代替她去往敵國和親绊寻。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,922評論 2 361

推薦閱讀更多精彩內容