Swift 擴(kuò)展 筆記

擴(kuò)展為現(xiàn)有的類、結(jié)構(gòu)體、枚舉類型、或協(xié)議添加了新功能

擴(kuò)展和 Objective-C 中的分類類似。(與 Objective-C 的分類不同的是,Swift 的擴(kuò)展沒(méi)有名字。)

Swift 中的擴(kuò)展可以:

  1. 添加計(jì)算實(shí)例屬性和計(jì)算類型屬性;
  2. 定義實(shí)例方法和類型方法;
  3. 提供新初始化器;
  4. 定義下標(biāo);
  5. 定義和使用新內(nèi)嵌類型;
  6. 使現(xiàn)有的類型遵循某協(xié)議

extension 關(guān)鍵字來(lái)聲明擴(kuò)展:

extension SomeType {
    //
    // 
}

擴(kuò)展可以使已有的類型遵循一個(gè)或多個(gè)協(xié)議。在這種情況下,協(xié)議名的書(shū)寫方式與類或結(jié)構(gòu)體完全一樣:

extension SomeType: SomeProtocol, AnotherProtocol {
    // implementation of protocol requirements goes here
}

擴(kuò)展可以為已有的類型添加新的實(shí)例方法和類型方法。下面的例子為 Int 類型添加了一個(gè)名為 repetitions 的新實(shí)例方法:

extension Int {
    func repetitions(task: () -> Void) {
        for _ in 0..<self {
            task()
        }
    }
}

repetitions(task:) 方法接收一個(gè) () -> Void 類型的單一實(shí)際參數(shù),它表示一個(gè)沒(méi)有參數(shù)且無(wú)返回值的函數(shù)。

3.repetitions {
    print("Hello!")
}
// Hello!
// Hello!
// Hello!

增加了擴(kuò)展的實(shí)例方法仍可以修改(或異變)實(shí)例本身。結(jié)構(gòu)體和枚舉類型方法在修改 self 或本身的屬性時(shí)必須標(biāo)記實(shí)例方法為 mutating ,和原本實(shí)現(xiàn)的異變方法一樣。

extension Int {
    mutating func square() {
        self = self * self
    }
}
var someInt = 3
someInt.square()
// someInt is now 9
下標(biāo)
extension Int {
    subscript(digitIndex: Int) -> Int {
        var decimalBase = 1
        for _ in 0..<digitIndex {
            decimalBase *= 10
        }
        return (self / decimalBase) % 10
    }
}
746381295[0]
// returns 5
746381295[1]
// returns 9
746381295[2]
// returns 2
746381295[8]
// returns 7
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 132.轉(zhuǎn)換錯(cuò)誤成可選值 通過(guò)轉(zhuǎn)換錯(cuò)誤成一個(gè)可選值,你可以使用 try? 來(lái)處理錯(cuò)誤。當(dāng)執(zhí)行try?表達(dá)式時(shí),如果...
    無(wú)灃閱讀 1,433評(píng)論 0 3
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young閱讀 4,197評(píng)論 1 10
  • Swift屬性 Swift屬性將值跟特定的類,結(jié)構(gòu)體,枚舉關(guān)聯(lián)。分為存儲(chǔ)屬性和計(jì)算屬性,通常用于特定類型的實(shí)例。屬...
    小小廚師閱讀 981評(píng)論 0 0
  • 基礎(chǔ)部分(The Basics) 當(dāng)推斷浮點(diǎn)數(shù)的類型時(shí),Swift 總是會(huì)選擇Double而不是Float。 結(jié)合...
    gamper閱讀 1,496評(píng)論 0 7
  • 曹彰是曹操的兒子 曹仁 、曹洪 是曹操的族兄弟 曹真是曹操收養(yǎng)的 曹操他們一家子的。 曹植、曹丕 、曹昂、曹彰、曹...
    小伙伴排好隊(duì)一人一只小花閱讀 720評(píng)論 0 0

友情鏈接更多精彩內(nèi)容