Swift-學習筆記--初始化

初始化

  • 類屿岂、結(jié)構(gòu)體、枚舉都可以定義初始化器

  • 類有2中初始化器:指定初始化器、便捷初始化器

  • 每個類至少有一個指定初始化器诗充,指定初始化器是類的主要初始化器

  • 默認初始化器總是類的指定初始化器

  • 類偏向于少量指定初始化器,一個類通常只有一個指定初始化器

  • 初始化器的相互調(diào)用規(guī)則
    -- 指定初始化器必須從它的直系父類調(diào)用指定初始化器
    -- 便捷初始化器必須從相同的類里調(diào)用另一個初始化器
    -- 便捷初始化器最終必須調(diào)用一個指定初始化器

image.png
image.png
  • 每個類至少有一個指定初始化器诱建,指定初始化器是類的主要初始化器
    -- 指定初始化器必須從它的直系父類調(diào)用指定初始化器

兩段式初始化

Swift為了保證初始化過程的安全蝴蜓,設(shè)定了兩段式初始化、安全檢查

  • 兩段式初始化

第一階段:初始化所有存儲屬性

1.外層調(diào)用指定\便捷初始化器
2.分配內(nèi)存給實例,但未初始化
3.指定初始化器確保當前定義的存儲屬性都初始化
4.指定初始化器調(diào)用父類的初始化器茎匠,不斷向上調(diào)用格仲,形成初始化器鏈

第二階段:設(shè)置新的存儲屬性值

1.從頂部初始化器往下,鏈中的每一個指定初始化器都有機會進一步定制實例
2.初始化器現(xiàn)在能夠使用self
3.最終诵冒,鏈中任何便捷初始化器都有機會定制實例以及使用self

在設(shè)置新的存儲屬性值或者其他定制化操作時凯肋,必須在第一階段結(jié)束后,才可以操作汽馋,編譯器在也在此基礎(chǔ)上禁止了在第一階段未結(jié)束前侮东,做定制化操作,保證了對象一定是初始化成功豹芯,且有值的悄雅。

重寫

  • 當重寫父類的指定初始化器時,必須加上override

  • 如果子類寫了一個匹配父類便捷初始化器的初始化器铁蹈,不用加上override
    -- 因為子類是無法重寫父類的便捷初始化器

自動繼承

1.如果子類沒有自定義任何指定初始化器宽闲,它會自動繼承父類所有的指定初始化器
也就是說,可以直接使用父類初始化器

2.如果子類提供了父類所有指定初始化器的實現(xiàn)
要不就是第一種握牧,使用自動繼承容诬,要不就是使用重寫

3.就算子類添加了更多的便捷初始化器,這些規(guī)則仍然適用

4.子類以便捷初始化器的形式重寫父類的指定初始化器我碟,也可以作為滿足規(guī)則的一部分

required

用required修飾指定初始化器放案,表明其所有子類都必須實現(xiàn)該初始化器(通過繼承或者重寫實現(xiàn))

如果子類重寫了required初始化器,也不許加上required,不用加override

image.png

必須也加上required否則會報錯

屬性觀察器

  • 父類的屬性在它自己的初始化器中賦值不會觸發(fā)屬性觀察器矫俺,但在子類的初始化器中賦值會觸發(fā)屬性觀察器
image.png
image.png

通過上述代碼可以看出吱殉,Person初始化器中是有賦值操作的,但是打印出來的觀察到的是1厘托,也就是說在繼承當中友雳,屬性觀察器,在初始化器中铅匹,注意是初始化器當中押赊,只會在子類的初始化器的賦值操作才會被回調(diào)。

可失敗初始化器

  • 類包斑、結(jié)構(gòu)體流礁、枚舉都可以使用init?定義可失敗初始化器
image.png
image.png

寫返回nil直接報錯

image.png

給初始化器加上罗丰?號神帅,報錯消失

  • 不允許同時定義參數(shù)標簽、參數(shù)個數(shù)萌抵、參數(shù)類型相同的可失敗初始化器和非可失敗初始化器
    (不能重名)
image.png

雖然初始化器的內(nèi)容不一樣找御,但是在使用時會引起歧義元镀。

  • 可以用 init! 定義隱私捷豹的可失敗初始化器

  • 可失敗初始化器可以調(diào)用非可失敗初始化器,非可失敗初始化器調(diào)用可失敗初始化器需要進行解包
    (因為可失敗初始化器就是一個可選項)

  • 如果初始化器調(diào)用一個可失敗初始化器導致初始化失敗霎桅,那么整個初始化過程都失敗栖疑,并且之后的代碼都停止執(zhí)行
    (失敗會返回nil,那么肯定就蹦了呀滔驶,也可以寫一些失敗措施)

  • 可用一個非可失敗初始化器重寫一個可失敗初始化器遇革,但反過來是不行的

反初始化器 (deinit)

deinit叫做反初始化器,類似OC中的dealloc方法

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末揭糕,一起剝皮案震驚了整個濱河市澳淑,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌插佛,老刑警劉巖杠巡,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件闸婴,死亡現(xiàn)場離奇詭異身冬,居然都是意外死亡屑那,警方通過查閱死者的電腦和手機睛蛛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進店門憨颠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來厂置,“玉大人早抠,你說我怎么就攤上這事谣拣∏舫眨” “怎么了叁怪?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長深滚。 經(jīng)常有香客問我奕谭,道長,這世上最難降的妖魔是什么血柳? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任难捌,我火速辦了婚禮鸦难,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘合蔽。我一直安慰自己,他們只是感情好愚争,可當我...
    茶點故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布轰枝。 她就那樣靜靜地躺著,像睡著了一般鞍陨。 火紅的嫁衣襯著肌膚如雪从隆。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天寿烟,我揣著相機與錄音筛武,去河邊找鬼。 笑死挎塌,一個胖子當著我的面吹牛榴都,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播嘴高,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼拴驮!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起快鱼,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤抹竹,失蹤者是張志新(化名)和其女友劉穎止潮,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體喇闸,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年宛琅,在試婚紗的時候發(fā)現(xiàn)自己被綠了逗旁。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡红伦,死狀恐怖淀衣,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情箕戳,我是刑警寧澤国撵,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布介牙,位于F島的核電站壮虫,受9級特大地震影響囚似,放射性物質(zhì)發(fā)生泄漏线得。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一募狂、第九天 我趴在偏房一處隱蔽的房頂上張望角雷。 院中可真熱鬧,春花似錦雷滚、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽谋减。三九已至躬充,卻和暖如春讨便,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背伴找。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工技矮, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人衰倦。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓樊零,卻偏偏與公主長得像孽文,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子芋哭,可洞房花燭夜當晚...
    茶點故事閱讀 44,779評論 2 354