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

2021-07-02 23:47:27 字數 3049 閱讀 4128

//

1.函式型別

//定義乙個變數(int,int) -> int

var myfun : (int ,int) -> int

//定義乙個變數(string)-> void

var test : (string) -> void

//計算乙個乘方的函式

func pow(#base : int, #exponent : int) -> int

return result

}//將pow函式賦值給myfun,把myfun當成pow使用

myfun = pow

println("\(myfun(3,4))")//

81//定義乙個計算面積的函式

func area(#width : int, #height : int) -> int

myfun = area

println(myfun(3,6))//

18//2.使用函式型別作為形參型別

func map(var #data : [int],#fn : (int) ->int) ->[int]

return data

}//定義乙個計算平方的函式

func square(val: int) ->int

var data : array = [3,5,4,7,9]

println("\(map(data:data,fn:square))")//[9, 25, 16, 49, 81]

//3.使用函式型別作為返回值型別

//計算平方的

func square1(val : int) -> int

//計算立方的

func cube(val : int) -> int

//定義乙個返回值型別為(int)-> int

func getmathfunc(#type:string) ->

(int) ->int

}var mathfunc = getmathfunc(type: "square")

println(mathfunc(5))//

25//3.當函式名相同,形參列表或者返回值型別不同,都是兩個不同的函式,被稱為函式過載,注意包含了個數可變的形參

func test(msg :string)

func text(booksname:string...)

//報錯

//test()

//test("b","a")

//4.巢狀函式,在函式體內部定義的函式

func getmath(#type:string) ->

(int) ->int

func cube(val:int) -> int

switch (type)

}var mathfun = getmath(type: "squ")

println(mathfun(5))//

25var math = getmath(type: "othe")

println(math(5))//

125//函式閉包表示式

/*** 1.無需func關鍵字,無需指定函式名

* 2.定義閉包需要額外使用in關鍵字

* 3.定義閉包的第乙個花括號要移到形參列表的圓括號之前

*/func getmat(#type:string) ->

(int) ->int

default:

return

}}//

2,呼叫閉包(使用閉包返回值)

//定義乙個閉包,並為閉包表示式的形參定義外部形參名

//然後將閉包賦值給square2變數

var square2 =

println(square2(4))//

16//使用閉包表示式定義閉包,並在閉包表示式後面新增圓括號來呼叫該閉包

var result2 =

return result

}(4,5)

println(result2)//

1024

//3.利用上下文推斷型別

//swift可以推斷閉包表示式的形參型別,返回值型別

//閉包表示式可以省略形參型別,返回值型別

varsquare3:(int) ->int =

println(square3(4))//

16var

result4:int =

return result

}(4,5)

println(result4)//

1024

//省略return,當閉包表示式只有一行**的時候,可以省略return關鍵字

var squrae4 : (int) -> int =

println(squrae4(5))//

5//4.尾隨閉包

func map1(var #data : [int],fn : (int) ->int) -> [int]

return data

}var data1 = [3,4,8,9,14,15,16]

println("計算陣列的平方")

var rvt1 = map1(data: data)

println(rvt1)//[9, 25, 16, 49, 81]

// $0 ,$1,$2,代表閉包函式的第一,2,3個形參

var rvt2 = map1(data: data1)

return result

}println(rvt2)//[6, 24, 40320, 362880, 87178291200, 1307674368000, 20922789888000]

//5.捕捉上下文德變數和常量

//定義乙個返回值型別是()->[string]

func makearray(ele:string) ->

() ->[string]

return addelement

}let add1 = makearray("good")

println(add1())//[good]

println(add1())//[good, good]

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

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

Swift 學習筆記 閉包

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

Swift學習3 函式和閉包

1,函式的返回值可以是元組 2,函式的引數可以有預設值 3,輸入輸出引數 用 可以進行位址傳遞 4,函式型別 可以模擬函式指標,可以作為引數,也可以作為返回值 func stepforward input int int func stepbackward input int int func ch...