欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

解析Swift中的泛型支持與使用

 更新時間:2016年07月08日 18:58:51   作者:琿少  
支持泛型意味著可以在規(guī)定參數(shù)類型的情況下更靈活地編寫程序,也是Swift語言先進而又強大的體現(xiàn),這里我們就來解析Swift中的泛型支持與使用:

一、以泛型為參數(shù)的函數(shù)

泛型是Swift語言強大的核心,泛型是對類型的抽象,使用泛型開發(fā)者可以更加靈活方便的表達代碼意圖。我們知道,有參函數(shù)的參數(shù)必須有一個明確的參數(shù)類型,有些時候開發(fā)者會遇到這樣一種情況,編寫一個函數(shù)用于交換兩個變量的值,由于變量有類型之分,實現(xiàn)相同的功能,可能需要重載成多個函數(shù)來實現(xiàn),這大大浪費了開發(fā)成本,使用泛型,可以完美的解決這個問題,示例代碼如下:

func exchange<T>(inout param1:T,inout param2:T){
  let tmp = param1
  param1 = param2
  param2 = tmp
}
var p1 = "15"
var p2 = "40"
exchange(&p1, param2: &p2)

上面的方法可以實現(xiàn)對任意相同類型變量的交換,函數(shù)參數(shù)中使用泛型,需要在函數(shù)名后的<>中定義參數(shù)占位符,如有多個參數(shù)占位符,用逗號隔開即可。

二、泛型在類型中的應用

泛型除了可以作為函數(shù)的參數(shù)、返回值外,在定義類型時,靈活應用泛型也可以解決很多十分棘手的問題,例如實現(xiàn)一個棧結(jié)構(gòu)的集合類型,示例代碼如下:

struct Stack<ItemType> {
  var items:[ItemType] = []
  mutating func push(param:ItemType) {
    self.items.append(param)
  }
  mutating func pop()->ItemType{
    return self.items.removeLast()
  }
}
//整型棧
var obj1 = Stack<Int>()
obj1.push(1)
obj1.pop()
//字符串棧
var obj2 = Stack<String>()
obj2.push("HS")
obj2.pop()

在對使用了泛型的類型進行擴展時,不需要在使用<>進行泛型的定義,直接使用原定義的泛型占位符即可,示例如下:

extension Stack{
  func getArray() -> [ItemType] {
    return items
  }
}

有時候,開發(fā)者需要對泛型進行一些約束,例如只允許此泛型是繼承自某個類或者實現(xiàn)了某個協(xié)議,示例代碼如下:

class MyClass {
  
}
//只有MyClass的子類可以進行Stack棧的創(chuàng)建
struct Stack<ItemType:MyClass> {
  var items:[ItemType] = []
  mutating func push(param:ItemType) {
    self.items.append(param)
  }
  mutating func pop()->ItemType{
    return self.items.removeLast()
  }
}

在協(xié)議中,可以使用另一種方式來進行泛型編程,使用associatedtype關鍵字可以進行類型關聯(lián),示例如下:

protocol MyProtocol {
  //實現(xiàn)協(xié)議時才指定類型
  associatedtype ItemType
  var param:ItemType {get set}
}
class MyClass:MyProtocol {
  //由于Swift可以自動識別類型 這是MyProtocol中的ItemType為Int
  var param: Int = 0
}

三、泛型與where子句的結(jié)合使用

使用where子句可以對泛型進行更加嚴格約束,使其符合開發(fā)者需要的邏輯,示例如下:

//T和C都要遵守整型協(xié)議
class MyClassTwo<T,C where T:IntegerType,C:IntegerType> {
  var param1:T
  var param2:C
  init(param1:T,param2:C){
    self.param1=param1
    self.param2=param2
    
  }
}

var obj3 = MyClassTwo(param1: 1, param2: 1)

相關文章

  • 用Swift構(gòu)建一個簡單的iOS郵件應用的方法

    用Swift構(gòu)建一個簡單的iOS郵件應用的方法

    這篇文章主要介紹了用Swift構(gòu)建一個簡單的iOS郵件應用的方法,包括查看和標記已讀等基本的郵件應用功能,需要的朋友可以參考下
    2015-07-07
  • 詳解Swift中enum枚舉類型的用法

    詳解Swift中enum枚舉類型的用法

    Swift中通過enum關鍵字可以直接創(chuàng)建出枚舉對象,而且可以使用switch和case語句來進行流程控制,十分強大和靈活,這里我們就來詳解Swift中enum枚舉類型的用法
    2016-06-06
  • Swift 如何讓ScrollView滾動到具體某個位置

    Swift 如何讓ScrollView滾動到具體某個位置

    這篇文章主要介紹了Swift 如何讓ScrollView滾動到具體某個位置,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-07-07
  • 深入理解Swift語言中的閉包機制

    深入理解Swift語言中的閉包機制

    這篇文章主要介紹了Swift語言中的閉包機制,是Swift入門學習中的基礎知識,需要的朋友可以參考下
    2015-11-11
  • Swift如何調(diào)用Objective-C的可變參數(shù)函數(shù)詳解

    Swift如何調(diào)用Objective-C的可變參數(shù)函數(shù)詳解

    這篇文章主要給大家介紹了關于Swift如何調(diào)用Objective-C的可變參數(shù)函數(shù)的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用swift具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2018-03-03
  • swift?framework使用OC?代碼兩種方式示例

    swift?framework使用OC?代碼兩種方式示例

    這篇文章主要為大家介紹了swift?framework使用OC?代碼兩種方式示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • 詳解在swift中實現(xiàn)NSCoding的自動歸檔和解檔

    詳解在swift中實現(xiàn)NSCoding的自動歸檔和解檔

    本篇文章主要介紹了在swift中實現(xiàn)NSCoding的自動歸檔和解檔,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-03-03
  • Swift 5.1 之類型轉(zhuǎn)換與模式匹配的教程詳解

    Swift 5.1 之類型轉(zhuǎn)換與模式匹配的教程詳解

    這篇文章主要介紹了Swift 5.1 之類型轉(zhuǎn)換與模式匹配的相關知識,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-05-05
  • Swift實現(xiàn)簡易計算器功能

    Swift實現(xiàn)簡易計算器功能

    這篇文章主要為大家詳細介紹了Swift實現(xiàn)簡易計算器功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Swift中的Access Control權限控制介紹

    Swift中的Access Control權限控制介紹

    這篇文章主要介紹了Swift中的Access Control權限控制介紹,本文講解了private、internal、public三個關鍵字的使用,需要的朋友可以參考下
    2015-05-05

最新評論