Swift新特性元組(Tuple)和其關鍵字inout

前言

最近在看swift的開發(fā)tips,其中有一個自己比較感興趣的就是多元組,打算和大家分享一下我理解中多元組的使用以及對關鍵字inout的理解。

元組的定義

元組是Objective-C中沒有的數(shù)據(jù)結構,與數(shù)組類似,都是表示一組數(shù)據(jù)的集合。說到與數(shù)組類似,但是也有區(qū)別的地方:元組的長度任意,元組中數(shù)據(jù)可以是不同的數(shù)據(jù)類型。
元組的定義很簡單的,用小括號括起來,里面的元素以逗號隔開,例如:

let user = ("小陳陳" ,true, 22)

元組的基本用法

1、可以通過索引去訪問

let user = ("小陳陳" ,true, 22)
print(user.0)//小陳陳

2、可以把元組分解開,然后再去使用

let (name,isFemale,age) = user
print(name)//小陳陳

3、如果你只需要一部分的值,可以用“_”來代替忽略掉其他部分

let (name,_,_) = user
print(name)//小陳陳

4、上面的使用看起來有點繁瑣,有個簡化的方式就是定義的時候給每個元素單獨命名

let user = (name:"小陳陳",isFemale:true,age:22)
print(user.name)//小陳陳
print(user.0)//小陳陳

inout的作用

聲明函數(shù)時,在參數(shù)前面用inout修飾,在函數(shù)內部實現(xiàn)改變外部參數(shù)。
需要注意幾點:
1、 只能傳入變量,不能傳入常量和字面量
2、傳入的時候,在變量名字前面用&符號修飾表示
3、inout修飾的參數(shù)是不能有默認值的,有范圍的參數(shù)集合也不能被修飾
4、一個參數(shù)一旦被inout修飾,就不能再被var和let修飾了
在Swift中inout參數(shù)前面使用的&符號可能會給你一種它是傳遞引用的印象,但是事實并非如此,引用官方的話就是:

inout參數(shù)將一個值傳遞給函數(shù),函數(shù)可以改變這個值,然后將原來的值替換掉,并從函數(shù)中傳出

元組和inout的運用

前面是我對元組簡單的一個理解,有了這樣的認識之后再去看Swifter里面講解的多元組的時候就會容易理解。里面舉了一個例子是交換輸入,普通的程序員普遍的寫法:

func swapMe<T>(a: inout T, b: inout T) {
    let temp = a
    a=b
    b = temp
}

使用多元組之后的寫法:

func swapMe<T>(a: inout T, b: inout T) {
    (a,b) = (b,a)
}

兩個方法達到的目的是一樣的,但是他們的實現(xiàn)方法是不一樣。最大的區(qū)別就是第一個方法開辟了一個額外的空間來完成交換,而使用元組的方法則不去開辟一個額外的空間。他們的調用方法是一樣的

var a: Int = 1
var b: Int = 2
swapMe(a: &a, b: &b)
print(a,b)//2,1

如果大家對inout的功能還存在疑惑的地方,我們換一種寫法來比較一下:

func swapMe<T>( a: T, b: T){
    var b = b
    var a = a
    (a,b) = (b,a)
    print(a,b)//1,2
}
swapMe(a: a, b: b)
print(a,b)//2,1

在參數(shù)前面用inout修飾的方法,在函數(shù)內部實現(xiàn)改變外部參數(shù)。參數(shù)前面沒有用inout修飾的方法,在函數(shù)執(zhí)行體里面確實是交換了兩個數(shù),但是外部的參數(shù)是沒有改變。

總結

這次的學習總結寫的有點雜,對于元組,我還是推薦大家多使用。但是關鍵字inout大家就要慎用了,畢竟他會直接改變你外部參數(shù)的值,有利也有弊。

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

相關閱讀更多精彩內容

  • 基礎部分(The Basics) 當推斷浮點數(shù)的類型時,Swift 總是會選擇Double而不是Float。 結合...
    gamper閱讀 1,509評論 0 7
  • 136.泛型 泛型代碼讓你可以寫出靈活,可重用的函數(shù)和類型,它們可以使用任何類型,受你定義的需求的約束。你可以寫出...
    無灃閱讀 1,667評論 0 4
  • 86.復合 Cases 共享相同代碼塊的多個switch 分支 分支可以合并, 寫在分支后用逗號分開。如果任何模式...
    無灃閱讀 1,568評論 1 5
  • 2014年的蘋果全球開發(fā)者大會(WWDC),當Craig Federighi向全世界宣布“We have new ...
    yeshenlong520閱讀 2,405評論 0 9
  • 洶涌 寂寞開滿森林 明媚的帆布鞋 穿行在夢里 笑顏 難能一見 我用塵埃埋起臉 讓眼淚生根開花 在黑夜里幻化成蝶 親...
    屈木糖閱讀 166評論 0 0

友情鏈接更多精彩內容