swift3.0:associatedtype

E文:https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Generics.html

associatedtype用于protocol中 associatedtype類型是在protocol中?代指一個確定類型并要求該類型實現(xiàn)指定方法

比如 我們定義一個protocol

protocol Container {   
  associatedtype ItemType    
  mutating func append(_ item:ItemType)   
  var count:Int { 
    get
   }    
  subscript(i:Int) -> ItemType { 
    get
   }
}

之后實現(xiàn)這個協(xié)議

struct IntStack: Container {    
  // original IntStack implementation    
  var items = [Int]()
    
  mutating func push(_ item:Int) {        
    items.append(item)    
  }
    
  mutating func pop() -> Int {        
    return items.removeLast()    
  }    
  // conformance to the Container protocol 
  typealias ItemType = Int    
  mutating func append(_ item:Int) {        
    self.push(item)    
  }    
  var count:Int {        
    return items.count    
  }   
  subscript(i:Int) -> Int {        
    return items[i]    
  }
}

其中items實現(xiàn)了ItemType這個代指變量
由于swift的類型推斷,你實際上并不需要聲明一個具體ItemType的Int作為定義的一部分IntStack。由于IntStack符合所有的要求Container協(xié)議,swift可以推斷出適當(dāng)?shù)腎temType使用,只需通過查看類型append(_:)方法的item參數(shù)和標(biāo)的返回類型。事實上,如果你刪除typealias ItemType = Int上面從代碼行,一切仍然有效,因為很明顯應(yīng)該使用什么類型ItemType。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young閱讀 4,202評論 1 10
  • 136.泛型 泛型代碼讓你可以寫出靈活,可重用的函數(shù)和類型,它們可以使用任何類型,受你定義的需求的約束。你可以寫出...
    無灃閱讀 1,662評論 0 4
  • 原文:Generics Manifesto -- Douglas Gregor 譯者注 在我慢慢地深入使用 Swi...
    kemchenj閱讀 2,487評論 0 6
  • 類型 在Swift中,有兩種類型:命名型類型和復(fù)合型類型。命名型類型是在定義時可以給定的特定名字的類型。命名型類型...
    silly鴻閱讀 759評論 0 0
  • 生活像是永遠(yuǎn)都停不下來的車輪,每一個上了車的人,只有拼命的學(xué)會去駕馭它—— 最近準(zhǔn)備搬家,偶然發(fā)現(xiàn)了一本被“塵封”...
    肥宅大學(xué)士閱讀 474評論 0 2

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