日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Swift 的函数和闭包

發布時間:2023/11/29 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Swift 的函数和闭包 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

函數的關鍵字是 func ,函數定義的格式是:

func funcName(para:paraType) -> returnType{// code } 復制代碼

函數的參數標簽

其中參數的那部分的詳細結構是用小括號括起來,參數名,冒號,參數類型: (number:Int)。 在默認情況下,函數的參數標簽使用參數名,或者用 _ 不使用參數標簽,也可以自定義標簽,我們定義一個奇葩的函數:

func 求和(數字1 num1:Float, 數字2 num2:Float) -> Float {return num1 + num2 } 復制代碼

求和 就是方法名,數字1 就是自定義的參數標簽。調用時會顯示標簽:

let sum = 求和(數字1: 2, 數字2: 4) 復制代碼

函數返回多個值

swift 還可以用元組返回多個返回值:

func compare(numarray:([Int])) -> (min:Int, max:Int) {var min = numarray[0]var max = numarray[0]for num in numarray {if num > max {max = num}else if num < min{min = num}}return (min, max) } 復制代碼

調用時獲取返回值:

compare(numarray: [1, 2, 3, 4, 5]).max 復制代碼

函數嵌套函數

swift 語法中函數可以嵌套函數,用于分割太長或者太復雜的函數:

// 不要在意邏輯,只是為了示例一下。。。 func sumWithArray(numArray:([Int])) -> Int{var sum = 0func add(num1:Int, num2:Int) -> Int{return num1 + num2}sum = add(num1: numArray[0], num2: numArray[1])return sum } 復制代碼

返回一個函數

函數還可以用一個函數做為返回值

func makeMethod() -> ((Int)->(Int)) {func addOne(num:Int)->(Int){return num+1}return addOne } 復制代碼

函數調用:

print("makeMethod()(1993): ",makeMethod()(1993)) // makeMethod()(1993): 1994 /** makeMethod() 返回的是一個函數,繼續傳入參數 1993,最后返回 1994 */ 復制代碼

傳入一個函數

函數可以把一個函數當做返回值返回,也可以當做一個參數來傳入:

func sumOfMaxMin(numarray:([Int]),compare:(_ numarray:([Int]))->(min:Int, max:Int)) -> (Int) {return compare(numarray).max + compare(numarray).min } 復制代碼

可以看到, sumOfMaxMin 函數有兩個參數:numarray:([Int]) 和 compare:(_ numarray:([Int]))->(min:Int, max:Int) 。其中 compare 是一個函數。

在調用的時候:

var sumOfMaxMinValue = sumOfMaxMin(numarray: [1, 2, 3, 4, 5],compare: compare) 復制代碼

compare 是上個例子中的函數。當然,我們也可以不傳入一個現成已經定義和實現的函數:

var sumOfMaxMinValue = sumOfMaxMin(numarray: [1, 2, 3, 4, 5]) { (numarray:([Int])) -> (min: Int, max: Int) invar min = numarray[0]var max = numarray[0]for num in numarray {if num > max {max = num}else if num < min{min = num}}return (min, max) } 復制代碼

函數是一種特殊的閉包

大家伙看到這里,肯定會一拍大腿:哎呦,這玩意不就是閉包嘛!

(The Swift Programming Language)函數實際上是一種特殊的閉包:它是一段能之后被調取的代碼。閉包中的代碼能訪問閉包所建作用域中能得到的變量和函數,即使閉包是在一個不同的作用域被執行的

我們可以使用{}來創建一個匿名閉包。使用in將參數和返回值類型聲明與閉包函數體進行分離。

let numArray:([Int]) = [1, 2, 3, 4, 5] var newNumArray:([Int]) = numArray.map({(num:Int) -> Int inlet newNum = num * 3return newNum }) 復制代碼

閉包的簡寫

如果閉包的類型已知,那么可以省略參數和返回值的類型

let numArray:([Int]) = [1, 2, 3, 4, 5] var newNumArray:([Int]) = numArray.map({num inlet newNum = num * 3return newNum }) 復制代碼

單個語句閉包會把它語句的值當做結果返回

let numArray:([Int]) = [1, 2, 3, 4, 5] var newNumArray:([Int]) = numArray.map({num innum * 3 }) 復制代碼

如果把上面的閉包寫成一行的話

let numArray:([Int]) = [1, 2, 3, 4, 5] var newNumArray:([Int]) = numArray.map({num in num * 3}) 復制代碼

我們可以通過參數位置而不是參數名字來引用參數,那么上面的代碼就變成這樣

let numArray:([Int]) = [1, 2, 3, 4, 5] var newNumArray:([Int]) = numArray.map({$0 * 3}) 復制代碼

當一個閉包是傳給函數的唯一參數,我們可以完全忽略括號

let numArray:([Int]) = [1, 2, 3, 4, 5] var newNumArray:([Int]) = numArray.map{$0 * 3} 復制代碼

我的博客:iosgg.cn/

總結

以上是生活随笔為你收集整理的Swift 的函数和闭包的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。