Swift中convenience和required關(guān)鍵字用法

convenience關(guān)鍵字

使用convenience關(guān)鍵字增加init方法

注意事項(xiàng):

  • 增加init的初始化方法
  • 必須調(diào)用Swift同一個(gè)類中的designated初始化完成設(shè)置
  • convenience的初始化方法不能被子類重寫(xiě)或者是從子類中以super的方式被調(diào)用

通過(guò)convenience對(duì)現(xiàn)有的類增加init方法撒桨,例子如下

class People {
    
    var name: String
    
    init(name: String) {
        self.name = name
    }
}


extension People {
    convenience init(smallName: String) {
        self.init(name: smallName)
    }
}

通過(guò)extension給原有的People類增加init方法

// 使用convenience增加init方法
extension People {
    convenience init(smallName: String) {
        self.init(name: smallName)
    }
}

結(jié)下來(lái)搬俊,Student類繼承父類People

class Student: People {
    var grade: Int
    
    init(name: String, grade: Int) {
        self.grade = grade
        super.init(name: name)
        // 無(wú)法調(diào)用
        // super.init(smallName: name)
    }
    
    // 可以被重寫(xiě) 
    override init(name: String) {
        grade = 1
        super.init(name: name)
    }
    
    // 無(wú)法重寫(xiě),編譯不通過(guò)
    override init(smallName: String) {
        grade = 1
        super.init(smallName: smallName)
    }
}
  • 子類對(duì)象調(diào)用父類的convenienceinit方法:只要在子類中實(shí)現(xiàn)重寫(xiě)了父類convenience方法所需要的init方法的話,我們?cè)谧宇愔芯涂梢允褂酶割惖?code>convenience初始化方法了

示例如下:

class People {
    
    var name: String
    
    init(name: String) {
        self.name = name
    }
}
// 使用convenience增加init方法
extension People {
    convenience init(smallName: String) {
        self.init(name: smallName)
    }
}


// 子類
class Teacher: People {
    
    var course: String
    
    init(name: String, course: String) {
        self.course = course
        super.init(name: name)
    }
    
    override init(name: String) {
        self.course = "math"
        super.init(name: name)
    }
}

// 調(diào)用convenience的init方法
let xiaoming = Teacher(smallName: "xiaoming")
  • 總結(jié):子類的designated初始化方法必須調(diào)用父類的designated方法蕴轨,以保證父類也完成初始化昏滴。

required關(guān)鍵字

對(duì)于某些我們希望子類中一定實(shí)現(xiàn)的designated初始化方法抛虫,我們可以通過(guò)添加required關(guān)鍵字進(jìn)行限制懂缕,強(qiáng)制子類對(duì)這個(gè)方法重寫(xiě)。

class People {
    
    var name: String
    
    required init(name: String) {
        self.name = name
    }
}

// 使用convenience增加init方法
extension People {
    convenience init(smallName: String) {
        self.init(name: smallName)
    }
}


// 子類
class Teacher: People {
    
    var course: String
    
    init(name: String, course: String) {
        self.course = course
        super.init(name: name)
    }
    
    required init(name: String) {
        self.course = "math"
        super.init(name: name)
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末键俱,一起剝皮案震驚了整個(gè)濱河市兰绣,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌编振,老刑警劉巖缀辩,帶你破解...
    沈念sama閱讀 211,290評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異踪央,居然都是意外死亡臀玄,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén)畅蹂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)健无,“玉大人,你說(shuō)我怎么就攤上這事液斜±巯停” “怎么了叠穆?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,872評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)臼膏。 經(jīng)常有香客問(wèn)我硼被,道長(zhǎng),這世上最難降的妖魔是什么讶请? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,415評(píng)論 1 283
  • 正文 為了忘掉前任祷嘶,我火速辦了婚禮,結(jié)果婚禮上夺溢,老公的妹妹穿的比我還像新娘。我一直安慰自己烛谊,他們只是感情好风响,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著丹禀,像睡著了一般状勤。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上双泪,一...
    開(kāi)封第一講書(shū)人閱讀 49,784評(píng)論 1 290
  • 那天持搜,我揣著相機(jī)與錄音,去河邊找鬼焙矛。 笑死葫盼,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的村斟。 我是一名探鬼主播贫导,決...
    沈念sama閱讀 38,927評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼蟆盹!你這毒婦竟也來(lái)了孩灯?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,691評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤逾滥,失蹤者是張志新(化名)和其女友劉穎峰档,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體寨昙,經(jīng)...
    沈念sama閱讀 44,137評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡讥巡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評(píng)論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了毅待。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片尚卫。...
    茶點(diǎn)故事閱讀 38,622評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖尸红,靈堂內(nèi)的尸體忽然破棺而出吱涉,到底是詐尸還是另有隱情刹泄,我是刑警寧澤,帶...
    沈念sama閱讀 34,289評(píng)論 4 329
  • 正文 年R本政府宣布怎爵,位于F島的核電站特石,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏鳖链。R本人自食惡果不足惜姆蘸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望芙委。 院中可真熱鬧逞敷,春花似錦、人聲如沸灌侣。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)侧啼。三九已至牛柒,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間痊乾,已是汗流浹背皮壁。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留哪审,地道東北人蛾魄。 一個(gè)月前我還...
    沈念sama閱讀 46,316評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像协饲,于是被迫代替她去往敵國(guó)和親畏腕。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評(píng)論 2 348

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