Swift 元組 typealias和泛型

2021-07-04 03:37:16 字數 2946 閱讀 3848

歡迎**。

一、元組

元組是多個值組合而成的復合值。元組中的值可以是任意型別,而且每乙個元素的型別可以是不同的。

1. 直接給元組填充內容

let http404error = (404, "not found")
2. 給元組內容設定名稱

let http200status = (statuscode: 200, description: "ok")
3. 訪問元組

let desc2 = http200status.description元組使用舉例:

1. 交換兩個變數的值

傳統的交換兩個變數值的方式是定義臨時變數來實現

func exchange(inout num1: int,inout num2: int)  

var a = 10

var b = 20

exchange(&a, &b)

有了元組後,我們可以這樣寫(帥呆了~~~):

func swapme(inout a: t, inout b: t)
2. 同時返回結果與錯誤資訊

在objective-c中,經常有請求網路資料的需求,所以我們會自定義乙個block用來返回資料和異常。有了元組之後就方便多了。如下面的例子:

func dosomethingmightcauseerror() -> (bool, nserror?)  else 

}let (success, maybeerror) = dosomethingmightcauseerror()

if let error = maybeerror else

可以看出,呼叫的時候,直接將結果返回為元組,處理起來就非常方便了。

二、typealias

其實typealias就相當於objective-c中的typedef,就是將型別重新命名,看起來更加語義化。

例如,計算兩點之間的距離。普通寫法:

func distancebetweenpoint(point: cgpoint, topoint: cgpoint) -> double 

let origin: cgpoint = cgpoint(x: 0, y: 0)

let point: cgpoint = cgpoint(x: 1, y: 1)

let distance: double = distancebetweenpoint(origin, point)

**中變數型別都是cgpoint和double,不能清晰的表達業務需求。所以,我們可以通過typealias進行改造。

typealias location = cgpoint

typealias distance = double

func distancebetweenpoint2(location: location, tolocation: location) -> distance

let origin2: location = location(x: 0, y: 0)

let point2: location = location(x: 1, y: 1)

let distance2: distance = distancebetweenpoint2(origin, point)

此時,看上去,location就是座標點,distance就是距離。

三、泛型

泛型就是在定義方法、類等的時候不指定具體的型別,只是用乙個字元或者字串進行佔位工作,等到真正呼叫方法或者類等的時候,傳遞進來具體的型別。泛型能夠很好地實現**的重構,減少重複**。

1. 交換兩個變數的值:

在上面的例子中,交換的兩個變數的型別是確定的,都是int,但如果此時要交換的是string型別,感覺**又必須重寫乙份了,而且重寫的部分就是將**中的int替換為string。所以,此時我們可以考慮使用泛型了。先看看寫法。

func swapvalue(inout first: t, inout second: t) 

var number1: int = 20

var number2: int = 30

swapvalue(&number1, &number2)

在定義函式swapvalue的時候,傳遞了泛型t,此時並不知道t具體是什麼型別,在呼叫的時候,指定具體型別即可。這樣,不管是交換什麼型別變數的值就都可以了。

2. 查詢陣列中某個值的索引

func findindex(array: [t], valuetofind: t) -> int? 

}return nil

}let array = [3,6,13,7,4,90,34]

let index = findindex(array, 13)

泛型資料比較,必須實現equatable協議。

3. 模擬棧

struct stack

mutating func pop() -> t

}var stackofstring = stack()

stackofstring.push("jack")

stackofstring.push("rose")

stackofstring.push("ruby")

let fromtop = stackofstring.pop()

Swift 兩 Swift訪問元組

在swift在,獲取元組的值到乙個位置,通過三種方法 這樣statuscode常量就表示404。而statusmessage常量就表示 not found 能夠使用下劃線 對不須要的值進行忽略。如上,能夠使用http404error.0表示404,使用http404error.1表示 not fou...

swift語言 元組

1 元組的概念 元組是一種復合資料型別。使用圓括號包含一組資料,可以將不同型別的資料組合在一起。可以使用隱氏型別推斷,也可以有型別標註。例子如下 import foundation var teacher miss yang 26,1.59 隱氏型別推斷 var teacher1 string,ag...

Swift語法 元組

一 元組 定義 元組 tuples 把多個值組合成乙個復合值。元組內的值可以是任意型別,並不要求是相同型別。1 定義 乙個型別為 int,string 的元組 http404error 的型別是 int,string 值是 404,not found 2 訪問 全部元組元素 部分元組元素 元組下標訪...