泛型

泛型總的來說有兩種使用:泛型函數(shù)、泛型類型

// 泛型函數(shù)
fun  oneBasicGenericityFunction<T>(_ a: inout T, _ b: inout) {
  // do something
}
// 泛型類型
struct  oneBasicGenericityClass<Element> {
  var items = [Element]()
}

在上面的 例子中,占位類型 T ,Element是類型參數(shù)的一個(gè)例子。類型參數(shù)指定并命名一個(gè)占位類型,并且緊隨在函數(shù)名或者類型名后面,使用一對尖括號(hào)括起來(例如 <T>,<Element>)。

擴(kuò)展泛型類型
 extension oneBasicGenericityClass {  
  var topItem: Element? {
        return items.isEmpty ? nil : items[items.count - 1]
    }
  func pirntElements {
      for value in items.enumerated {
          print(value)
      }
  }
}

可以看出當(dāng)你擴(kuò)展一個(gè)泛型類型的時(shí)候,你并不需要在擴(kuò)展的定義中提供類型參數(shù)列表。原始類型定義中聲明的類型參數(shù)列表在擴(kuò)展中可以直接使用,并且這些來自原始類型中的參數(shù)名稱會(huì)被用作原始定義中類型參數(shù)的引用。

類型約束

上面的oneBasicGenericityFunction(::)泛型函數(shù)和oneBasicGenericityClass泛型類型中的T,Element可以是任何類型。不過,有的時(shí)候如果能將使用在泛型函數(shù)和泛型類型中的類型添加一個(gè)特定的類型約束,將會(huì)是非常有用的。類型約束可以指定一個(gè)類型參數(shù)必須繼承自指定類,或者符合一個(gè)特定的協(xié)議或協(xié)議組合。類型參數(shù)的基本語法如下:

func someFunction<T: SomeClass, U: SomeProtocol>(someT: T, someU: U) {
    // 這里是泛型函數(shù)的函數(shù)體部分
}

在Swift中,class、struct、enums都可以是用參數(shù)化類型來表達(dá)泛型的,只有在協(xié)議中需要使用associatedtype關(guān)鍵字來表達(dá)參數(shù)化類型。為什么協(xié)議不采用這樣的語法形式呢? 問題答案傳送門

未完待續(xù)

最后編輯于
?著作權(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)容

  • 本章將會(huì)介紹 泛型所解決的問題泛型函數(shù)類型參數(shù)命名類型參數(shù)泛型類型擴(kuò)展一個(gè)泛型類型類型約束關(guān)聯(lián)類型泛型 Where...
    寒橋閱讀 713評論 0 2
  • 泛型(Generics) 泛型代碼允許你定義適用于任何類型的,符合你設(shè)置的要求的,靈活且可重用的 函數(shù)和類型。泛型...
    果啤閱讀 758評論 0 0
  • 泛型的概念 泛型代碼可根據(jù)自定義需求,寫出適用于任何類型、靈活且可重用的函數(shù)和類型,避免重復(fù)的代碼,用一種清晰和抽...
    伯wen閱讀 459評論 0 2
  • object 變量可指向任何類的實(shí)例,這讓你能夠創(chuàng)建可對任何數(shù)據(jù)類型進(jìn)程處理的類。然而,這種方法存在幾個(gè)嚴(yán)重的問題...
    CarlDonitz閱讀 1,018評論 0 5
  • 今晚怎么寫都寫不好,以為是筆的原因,換了一支,依然一樣,以為是字的原因,換了個(gè)字,也依然一樣。心情不美麗。
    清風(fēng)_bfd7閱讀 236評論 0 0

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