Swift 閉包簡單使用

2021-07-04 18:17:09 字數 2420 閱讀 9783

//: playground - noun: a place where people can play

import uikit

var str = "hello, playground"

/**閉包(closures):

閉包:是自包含的**塊,可以在**中被傳遞和使用

閉包可以捕獲和儲存其所在上下文中任意常量和變數的引用,這就是所謂的閉包幷包裹著這些常量和變數,俗稱閉包.

閉包的幾種形式:

1,「全域性函式是乙個有名字但不會捕獲任何值的閉包

2,巢狀函式是乙個有名字並可以捕獲其封閉函式域內值的閉包

3,閉包表示式是乙個利用輕量級語法所寫的可以捕獲其上下文中變數或常量值的匿名閉包」

閉包的常見優化場景:

1,「利用上下文推斷引數和返回值型別

2,隱式返回單表示式閉包,即單表示式閉包可以省略return關鍵字

3,引數名稱縮寫

4,尾隨(trailing)閉包語法」

*//**

sorted函式

1,接收兩個引數:

1>已知型別的陣列

2>閉包函式,

*/// sorted函式

var strs = ["dd", "cc", "aa", "bb"]

func backwards(str1:string, str2:string)->bool

var sortfun = sorted(strs, backwards)

/** 閉包表示式語法

// 格式

1, 函式和返回值都在大括號之內

2, in:該關鍵字表示閉包的引數和返回值型別定義已經完成,閉包函式體即將開始

*/// 使用

sortfun = sorted(strs, )

/**根據上下文推斷型別:

通過內聯閉包表示式構造的閉包作為引數傳遞給函式時,都可以推斷出閉包的引數和返回值型別,所以幾乎不需要利用完整格式構造任何內聯閉包

*/sortfun = sorted(strs, )

/**單表示式閉包隱式返回:

通過隱藏return 關鍵字來隱式返回單行表示式的結果

*/sortfun = sorted(strs, )

/**引數名稱縮寫:

1,內聯函式的引數名稱可以縮寫,使用比如:$0,$1順序呼叫閉包引數

2,如果使用了引數名稱縮寫,可以省略引數的定義,因為名稱縮寫的型別會根據函式型別進行推斷

3,in關鍵字也可以省略,閉包表示式完全由閉包函式體構成

*/sortfun = sorted(strs, )

/**運算子函式:

1,swift的string型別定義了關於大於號(>)的字串實現

2,">"作為乙個函式接收兩個string型別的引數,並返回bool型別

*/// 此處剛好滿足">"運算子的條件

sortfun = sorted(strs, >);

/**尾隨閉包

使用情況:如果需要將乙個很長的閉包表示式作為最後乙個引數傳遞給函式,可以使用尾隨閉包來增強函式的可讀性

*/// 不使用尾隨閉包

func afunc(closur:()->())

// 只有乙個閉包引數的尾隨閉包

afunc()

// 有多個引數,且最後乙個引數為閉包的的尾隨閉包

afunc()

// 如果函式只有閉包表示式乙個引數,使用尾隨閉包可以省略"()"

afunc

// 字串陣列的sorted排序可以簡寫

sortfun = sorted(strs)

/**swift的array型別有乙個map方法:

0,獲取乙個閉包表示式作為其唯一引數,並返回該元素所對映的值(可以是不同型別的值)

1,陣列中的每乙個值都會呼叫這個閉包

2,具體的對映方法和返回值型別由閉包來指定

3,當提供給陣列閉包函式後,map方法將返回乙個新的陣列,陣列中包含了與原陣列--對應對映後的值

*//**

使用map的尾隨閉包方法將int型陣列[123, 58, 79]轉換為包含對應string型別的陣列["onetwothree","threefourtwo,"onetwo""]

*/let digitnames = [

0 : "zero", 1 : "two", 3 : "three",4 : "four",5 : "five",

6 : "six", 7 : "seven", 8 : "eight",9 : "nine"

]let numbers = [123, 58, 79]

let numberstostrings = numbers.map

return output

}numberstostrings

/**閉包表示式(closure expressions)

*/

Swift閉包2 尾閉包

假設有這樣乙個函式 這個函式的最後乙個引數是乙個閉包,並且,這個閉包表示式很長。如果按照正常的方式來呼叫這個函式的話,需要在引數裡指明這個函式的引數名,然後後面跟著乙個閉包表示式。比如下面這種函式 func somefunctionthattakesaclosure closure void 正常的...

Swift基礎 閉包

閉包是自包含的函式 塊,可以在在 中被傳遞和使用。閉包能捕獲和儲存騎在上下文中任意常量和變數的引用。這就是所謂的閉合幷包裹著這些常量和變數,俗稱閉包。swift會為我們管理在捕獲過程中設計的所有記憶體操作。閉包表示式式一種利用簡潔語法構建內聯的方式 2.1 sorted函式 swift標準庫提供了s...

Swift 閉包專題

import foundation var arr 3,1,4,5,2 arr.sort by arr.sort by arr.sort by arr.sort by arr.sort by arr.sort by arrimport foundation var arr 3,1,4,5,2 當so...