最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

泛型是Swift語言強(qiáng)大的核心,泛型是對類型的抽象,使用泛型開發(fā)者可以更加靈活方便的表達(dá)代碼意圖。我們知道,有參函數(shù)的參數(shù)必須有一個明確的參數(shù)類型,有些時候開發(fā)者會遇到這樣一種情況,編寫一個函數(shù)用于交換兩個變量的值,由于變量有類型之分,實現(xiàn)相同的功能,可能需要重載成多個函數(shù)來實現(xiàn),這大大浪費(fèi)了開發(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ù)占位符,用逗號隔開即可。

二、泛型在類型中的應(yīng)用

泛型除了可以作為函數(shù)的參數(shù)、返回值外,在定義類型時,靈活應(yīng)用泛型也可以解決很多十分棘手的問題,例如實現(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()

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

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

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

class MyClass {
  
}
//只有MyClass的子類可以進(jìn)行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é)議中,可以使用另一種方式來進(jìn)行泛型編程,使用associatedtype關(guān)鍵字可以進(jìn)行類型關(guān)聯(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子句可以對泛型進(jìn)行更加嚴(yán)格約束,使其符合開發(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)

相關(guān)文章

  • swift4.0實現(xiàn)視頻播放、屏幕旋轉(zhuǎn)、倍速播放、手勢調(diào)節(jié)及鎖屏面板等功能實例

    swift4.0實現(xiàn)視頻播放、屏幕旋轉(zhuǎn)、倍速播放、手勢調(diào)節(jié)及鎖屏面板等功能實例

    這篇文章主要給大家介紹了關(guān)于swift4.0實現(xiàn)視頻播放、屏幕旋轉(zhuǎn)、倍速播放、手勢調(diào)節(jié)及鎖屏面板等功能的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-01-01
  • swift計步器CMPedometer的使用方法

    swift計步器CMPedometer的使用方法

    這篇文章主要為大家詳細(xì)介紹了swift計步器CMPedometer的使用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • SwiftUI自定義導(dǎo)航的方法實例

    SwiftUI自定義導(dǎo)航的方法實例

    導(dǎo)航是我們平時經(jīng)常會遇到的一個需求,下面這篇文章主要給大家介紹了關(guān)于SwiftUI自定義導(dǎo)航的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • 詳解Swift中的函數(shù)及函數(shù)閉包使用

    詳解Swift中的函數(shù)及函數(shù)閉包使用

    Swift的函數(shù)在創(chuàng)建和調(diào)用時非常簡潔,在編寫具有閉包特性的函數(shù)時同樣也相當(dāng)方便,以下我們就來詳解Swift中的函數(shù)及函數(shù)閉包使用:
    2016-06-06
  • Swift心得筆記之運(yùn)算符

    Swift心得筆記之運(yùn)算符

    區(qū)別于 C 語言,在 Swift 中你可以對浮點數(shù)進(jìn)行取余運(yùn)算(%),Swift 還提供了 C 語言沒有的表達(dá)兩數(shù)之間的值的區(qū)間運(yùn)算符,(a..b和a...b),這方便我們表達(dá)一個區(qū)間內(nèi)的數(shù)值。
    2015-04-04
  • Swift教程之控制流詳解

    Swift教程之控制流詳解

    這篇文章主要介紹了Swift教程之控制流詳解,本文詳細(xì)講解了Swift中的for循環(huán)、for-in循環(huán)、For-Condition-Increment條件循環(huán)、while循環(huán)、Do-while循環(huán)、if條件語句等控制流語句,需要的朋友可以參考下
    2015-01-01
  • Swift讀取App的版本信息與PCH文件詳解

    Swift讀取App的版本信息與PCH文件詳解

    這篇文章主要介紹了Swift讀取App的版本信息與PCH文件的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),對大家具有一定的參考價值,需要的朋友們下面來一起看看吧。
    2017-03-03
  • 詳細(xì)講解Swift中的類型占位符

    詳細(xì)講解Swift中的類型占位符

    類型占位符是swift5.6中引?的?個新功能,在處理稍微復(fù)雜的通?類型時,它可能真的很有用,這篇文章主要給大家介紹了關(guān)于Swift類型占位符的相關(guān)資料,需要的朋友可以參考下
    2022-06-06
  • Swift教程之下標(biāo)詳解

    Swift教程之下標(biāo)詳解

    這篇文章主要介紹了Swift教程之下標(biāo)詳解,本文講解了下標(biāo)語法、下標(biāo)的使用、下標(biāo)選項等內(nèi)容,需要的朋友可以參考下
    2015-01-01
  • Swift3.0仿支付寶二維碼掃描效果

    Swift3.0仿支付寶二維碼掃描效果

    這篇文章主要為大家詳細(xì)介紹了Swift3.0仿支付寶二維碼掃描效果的相關(guān)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-02-02

最新評論

徐州市| 大理市| 大足县| 天峨县| 佛坪县| 肇庆市| 蕲春县| 余姚市| 阳西县| 明溪县| 淮北市| 江安县| 芦溪县| 太仓市| 和田市| 洪湖市| 陈巴尔虎旗| 南昌县| 龙井市| 太保市| 黄石市| 阿勒泰市| 惠州市| 偏关县| 九寨沟县| 大埔县| 皮山县| 上杭县| 锡林郭勒盟| 旬阳县| 大庆市| 云安县| 藁城市| 温州市| 忻城县| 澳门| 杭锦后旗| 卓尼县| 乳山市| 平乐县| 台北县|