Swift學習筆記(12) 閉包

2021-08-10 10:20:57 字數 2453 閱讀 3944

以下定義了乙個接收引數並返回指定型別的閉包語法:

簡單的小例子:

let divide = 

let result = divide(200, 20)

print (result)

//以上程式執行輸出結果為:10

let names = ["at", "ae", "d", "s", "be"]

// 使用普通函式(或內嵌函式)提供排序功能,閉包函式型別需為(string, string) -> bool。

func backwards(s1: string, s2: string) -> bool

var reversed = names.sorted(by: backwards)

print(reversed)

// 以上程式執行輸出結果為:

// ["s", "d", "be", "at", "ae"]

sorted(by:)方法需要傳入兩個引數:

1.已知型別的陣列。|| 例子中為names陣列

2.閉包函式。|| func backwards(s1: string, s2: string)->bool

傳入引數:2個,與陣列元素型別相同|| 兩個sting型別

返回值:布林型別值。|| s1>s2,大於true

true——排序結束後傳入的第乙個引數排在第二個引數前面

false——排在後面

引數名稱縮寫。可以直接通過0,

1,$2來順序呼叫閉包的引數。

若用引數名稱縮寫,可以在閉包引數列表中省略對其定義, swift會進行函式型別推斷。in 關鍵字同樣也可以被省略。

例項

let names = ["at", "ae", "d", "s", "be"]

var reversed = names.sorted( by: )

print(reversed)

// $0和$1表示閉包中第乙個和第二個string型別的引數。

// 以上程式執行輸出結果為:

// ["s", "d", "be", "at", "ae"]

let names = ["at", "ae", "d", "s", "be"]

var reversed = names.sorted(by: >)

print(reversed)

// 以上程式執行輸出結果為:

// ["s", "d", "be", "at", "ae"]

利用運算子函式,只傳遞乙個運算子。

使用前提:sorted(by:)方法與(>)大於號運算子函式的傳入引數和返回值型別相同。

swift 的string型別定義了關於大於號 (>) 的字串實現,其作為乙個函式接受兩個string型別的引數並返回bool型別的值。 而這正好與sort(_:)方法的第二個引數需要的函式型別相符合。

let names = ["at", "ae", "d", "s", "be"]

//尾隨閉包

var reversed = names.sorted()

print(reversed)

// sort() 後的 為尾隨閉包。

// 以上程式執行輸出結果為:

// ["s", "d", "be", "at", "ae"]

如果函式只需要閉包表示式乙個引數,使用尾隨閉包時,甚至可以把()省略掉。即為:reversed = names.sorted

閉包的形式有:

1.全域性函式:有名字但不能捕獲任何值。

2.巢狀函式:有名字,也能捕獲封閉函式內的值。

3.閉包表示式:無名閉包,使用輕量級語法,可以根據上下文環境捕獲值。

func makeincrementor(forincrement amount: int) ->

() -> int

return incrementor

}let incrementbyten = makeincrementor(forincrement: 10)

// 返回的值為10

print(incrementbyten())

// 返回的值為20

print(incrementbyten())

// 返回的值為30

print(incrementbyten())

//以上程式執行輸出結果為:

//10

//20

//30

Swift 學習筆記 閉包

閉包可以捕獲和儲存其所在上下文中任意常量和變數的引用。這就是所謂的閉合幷包裹著這些常量和變數,俗稱閉包。閉包有三種形式 全域性函式是乙個有名字,但不會捕獲任何值得閉包 巢狀函式是乙個有名字,並可以捕獲其封閉函式域內值的閉包。閉包表示式是乙個利用輕量級語法所寫的可以捕獲其上下文變數或常量值的匿名閉包。...

swift 學習《五》 閉包

函式 格式 引數列表 對外名內部使用名 引數型別,對外名內部使用名 引數型別 閉包格式 宣告乙個引數是閉包的函式 func 函式名 閉包名 引數名 引數型別 引數名 引數型別 返回值 呼叫 引數中帶閉包的函式 函式名 1,尾隨引數,沒有值的括號可省,沒有返回值是,in 都課省 2,in 的作用是,分...

Swift學習筆記 函式和閉包(1)

函式是swift的重要組成單位,乙個swift程式可以包含很多函式 函式定義和呼叫 定義乙個函式,宣告2個形參,返回int型別 func max x int y int int 宣告乙個函式,宣告乙個形參,返回string型別 func sayhi name string string var a ...