# 構(gòu)造函數(shù)基礎(chǔ)

構(gòu)造函數(shù)是一種特殊的函數(shù)寇损,主要用來在創(chuàng)建對象時(shí)初始化對象凸郑,為對象成員變量設(shè)置初始值,在 OC 中的構(gòu)造函數(shù)是 initWithXXX润绵,在 Swift 中由于支持函數(shù)重載线椰,所有的構(gòu)造函數(shù)都是 init

構(gòu)造函數(shù)的作用

  • 分配空間 alloc
  • 設(shè)置初始值 init

必選屬性

  • 自定義 Person 對象
class Person: NSObject {

    /// 姓名
    var name: String
    /// 年齡
    var age: Int
}

提示錯(cuò)誤 Class 'Person' has no initializers -> 'Person' 類沒有實(shí)例化器s

原因:如果一個(gè)類中定義了必選屬性,必須通過構(gòu)造函數(shù)為這些必選屬性分配空間并且設(shè)置初始值

  • 重寫 父類的構(gòu)造函數(shù)
/// `重寫`父類的構(gòu)造函數(shù)
override init() {
    
}

提示錯(cuò)誤 Property 'self.name' not initialized at implicitly generated super.init call -> 屬性 'self.name' 沒有在隱式生成的 super.init 調(diào)用前被初始化

  • 手動(dòng)添加 super.init() 調(diào)用
/// `重寫`父類的構(gòu)造函數(shù)
override init() {
    super.init()
}

提示錯(cuò)誤 Property 'self.name' not initialized at super.init call -> 屬性 'self.name' 沒有在 super.init 調(diào)用前被初始化

  • 為比選屬性設(shè)置初始值
/// `重寫`父類的構(gòu)造函數(shù)
override init() {
    name = "張三"
    age = 18
    
    super.init()
}

小結(jié)

  • 非 Optional 屬性尘盼,都必須在構(gòu)造函數(shù)中設(shè)置初始值憨愉,從而保證對象在被實(shí)例化的時(shí)候,屬性都被正確初始化
  • 在調(diào)用父類構(gòu)造函數(shù)之前卿捎,必須保證本類的屬性都已經(jīng)完成初始化
  • Swift 中的構(gòu)造函數(shù)不用寫 func

子類的構(gòu)造函數(shù)

  • 自定義子類時(shí)配紫,需要在構(gòu)造函數(shù)中,首先為本類定義的屬性設(shè)置初始值
  • 然后再調(diào)用父類的構(gòu)造函數(shù)午阵,初始化父類中定義的屬性
/// 學(xué)生類
class Student: Person {

    /// 學(xué)號(hào)
    var no: String
    
    override init() {
        no = "001"
        
        super.init()
    }
}

小結(jié)

  • 先調(diào)用本類的構(gòu)造函數(shù)初始化本類的屬性
  • 然后調(diào)用父類的構(gòu)造函數(shù)初始化父類的屬性
  • Xcode 7 beta 5之后躺孝,父類的構(gòu)造函數(shù)會(huì)被自動(dòng)調(diào)用享扔,強(qiáng)烈建議寫 super.init(),保持代碼執(zhí)行線索的可讀性
  • super.init() 必須放在本類屬性初始化的后面植袍,保證本類屬性全部初始化完成

Optional 屬性

  • 將對象屬性類型設(shè)置為 Optional
class Person: NSObject {
    /// 姓名
    var name: String?
    /// 年齡
    var age: Int?
}
  • 可選屬性不需要設(shè)置初始值惧眠,默認(rèn)初始值都是 nil
  • 可選屬性是在設(shè)置數(shù)值的時(shí)候才分配空間的,是延遲分配空間的于个,更加符合移動(dòng)開發(fā)中延遲創(chuàng)建的原則
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末氛魁,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子厅篓,更是在濱河造成了極大的恐慌秀存,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,820評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件羽氮,死亡現(xiàn)場離奇詭異或链,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)档押,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門澳盐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人令宿,你說我怎么就攤上這事洞就。” “怎么了掀淘?”我有些...
    開封第一講書人閱讀 168,324評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵旬蟋,是天一觀的道長。 經(jīng)常有香客問我革娄,道長倾贰,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,714評(píng)論 1 297
  • 正文 為了忘掉前任拦惋,我火速辦了婚禮匆浙,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘厕妖。我一直安慰自己首尼,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,724評(píng)論 6 397
  • 文/花漫 我一把揭開白布言秸。 她就那樣靜靜地躺著软能,像睡著了一般。 火紅的嫁衣襯著肌膚如雪举畸。 梳的紋絲不亂的頭發(fā)上查排,一...
    開封第一講書人閱讀 52,328評(píng)論 1 310
  • 那天,我揣著相機(jī)與錄音抄沮,去河邊找鬼跋核。 笑死岖瑰,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的砂代。 我是一名探鬼主播蹋订,決...
    沈念sama閱讀 40,897評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼刻伊!你這毒婦竟也來了辅辩?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,804評(píng)論 0 276
  • 序言:老撾萬榮一對情侶失蹤娃圆,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后蛾茉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體讼呢,經(jīng)...
    沈念sama閱讀 46,345評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,431評(píng)論 3 340
  • 正文 我和宋清朗相戀三年谦炬,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了悦屏。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,561評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡键思,死狀恐怖础爬,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情吼鳞,我是刑警寧澤看蚜,帶...
    沈念sama閱讀 36,238評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站赔桌,受9級(jí)特大地震影響供炎,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜疾党,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,928評(píng)論 3 334
  • 文/蒙蒙 一音诫、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧雪位,春花似錦竭钝、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至时肿,卻和暖如春穴吹,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背嗜侮。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評(píng)論 1 272
  • 我被黑心中介騙來泰國打工港令, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留啥容,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,983評(píng)論 3 376
  • 正文 我出身青樓顷霹,卻偏偏與公主長得像咪惠,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子淋淀,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,573評(píng)論 2 359

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

  • 構(gòu)造過程是使用類遥昧、結(jié)構(gòu)體或枚舉類型的實(shí)例之前的準(zhǔn)備過程。在新實(shí)例可用前必須執(zhí)行這個(gè)過程朵纷,具體操作包括設(shè)置實(shí)例中每個(gè)...
    莽原奔馬668閱讀 686評(píng)論 0 3
  • 本章將會(huì)介紹 存儲(chǔ)屬性的初始賦值自定義構(gòu)造過程默認(rèn)構(gòu)造器值類型的構(gòu)造器代理類的繼承和構(gòu)造過程可失敗構(gòu)造器必要構(gòu)造器...
    寒橋閱讀 770評(píng)論 0 0
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young閱讀 3,819評(píng)論 1 10
  • 123.繼承 一個(gè)類可以從另外一個(gè)類繼承方法,屬性和其他特征袍辞。當(dāng)一個(gè)類繼承另外一個(gè)類時(shí), 繼承類叫子類, 被繼承的...
    無灃閱讀 1,398評(píng)論 2 4
  • 現(xiàn)在快凌晨3點(diǎn)了鞋仍,我第一次沒有一點(diǎn)睡意。平時(shí)這個(gè)時(shí)候搅吁,我都已在夢鄉(xiāng)中威创,自從結(jié)婚到現(xiàn)在,一直覺得自己從來沒有善待過自...
    73號(hào)慧慧閱讀 231評(píng)論 1 2