Swift - 關(guān)鍵字associatedtype

associatedtype:關(guān)聯(lián)類型,定義一個(gè)協(xié)議時(shí),有的時(shí)候聲明一個(gè)或多個(gè)關(guān)聯(lián)類型作為協(xié)議定義的一部分將會(huì)非常有用。關(guān)聯(lián)類型為協(xié)議中的某個(gè)類型提供了一個(gè)占位名(或者說別名),其代表的實(shí)際類型在協(xié)議被采納時(shí)才會(huì)被指定。你可以通過 associatedtype 關(guān)鍵字來指定關(guān)聯(lián)類型。

協(xié)議中不支持泛型,如果在協(xié)議中需要達(dá)到泛型這種類似的效果
我們可以使用 associatedtype 關(guān)鍵字。

//模型
class Animal {
    var name: String?
    var age : Int = 0
}

class Dog: Animal {
    var color: String?
}

class Cat: Animal {
    
    var action:String?
}

//定義一個(gè)協(xié)議
protocol AnimalProtocol {
    //定義一個(gè)關(guān)聯(lián)類型
    associatedtype T;
    
    func append(_ item: T)
}

class Person: AnimalProtocol {
    //在使用協(xié)議時(shí)需要明確指定協(xié)議中的關(guān)聯(lián)類型
    typealias T = Dog;
    
    func append(_ item: Dog) {
        print("添加一只狗")
    }
    
}

class Student: AnimalProtocol {
    //在使用協(xié)議時(shí)需要明確指定協(xié)議中的關(guān)聯(lián)類型
    typealias T = Cat
    
    func append(_ item: Cat) {
        print("添加一只貓")
    }
}

其實(shí)我們還可以對協(xié)議中定義的 T(泛型)指定具體的類型,或則添加相應(yīng)的約束來限制類型:

protocol DogProtocol {
    associatedtype T : Dog
    
    func append(_ item: T)
}

協(xié)議類型作為返回值:

protocol TestProtocol {
    associatedtype service
    func creatService() -> service
}

protocol TestProtocol2 {
    
    func creatService()
}

protocol TestProtocol3 {
    func testMethod()
}

class TestClass2: TestProtocol2 {
    func creatService() {
        
    }
}

class TestClass3: TestProtocol3 {
    func testMethod() {
        
    }
}

class Test: TestProtocol {
    typealias service = TestProtocol2
    func creatService() -> service {
        return TestClass2.init() // 協(xié)議作為返回值, 我們可以返回一個(gè)遵守該協(xié)議的實(shí)例對象
    }
}

class Test1: TestProtocol {
    typealias service = TestProtocol3
    
    func creatService() -> service {
        return TestClass3.init()// 協(xié)議作為返回值, 我們可以返回一個(gè)遵守該協(xié)議的實(shí)例對象
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • associatedtype 關(guān)聯(lián)類型的關(guān)鍵字,處理 協(xié)議 中的范型使用場景 實(shí)現(xiàn) Stack 協(xié)議 錯(cuò)誤例子: ...
    呵呵_7380閱讀 1,032評論 0 3
  • 一、簡介 關(guān)鍵字 指swift已經(jīng)使用的字段,如let var等。特性 通過在@符號后跟一個(gè)特性名稱與參數(shù),來聲明...
    想聽丿伱說衹愛我閱讀 408評論 0 1
  • 有句話之前我提過,今天還想再說一次。那就是打鐵還需自身硬。對于自身能力的嚴(yán)格要求,可以幫助實(shí)現(xiàn)我們所有夢寐以求的東...
    蘋果上的小豌豆閱讀 2,260評論 0 7
  • 作者:Jordan Morgan,原文鏈接,原文日期:2017-02-11 譯者:鄭一一;校對:numbbbbb,...
    iOS亮子閱讀 691評論 0 1
  • 常見的Swift關(guān)鍵字 let - 定義常量,不可變,如果對let定義的常量重新賦值會(huì)報(bào)錯(cuò),并提供Fix-it,變...
    Mr__Peng__閱讀 448評論 0 1

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