波哥Swift學(xué)習(xí)9.5~9.8學(xué)習(xí)總結(jié)

這幾次課程的內(nèi)容對(duì)我來(lái)說(shuō)最大的收獲是函數(shù)類型與如何使用閉包讓代碼更加簡(jiǎn)潔。


本次內(nèi)容有:

  • 函數(shù)類型
  • 閉包

函數(shù)類型

函數(shù)類型:包含參數(shù)和返回類型的簡(jiǎn)寫(xiě)形式,可以像普通變量那樣使用,一般用于函數(shù)式編程. ??(Int,Int) -> Int
舉個(gè)例子:定義一個(gè)計(jì)算函數(shù)calculate來(lái)進(jìn)行+ - * / 運(yùn)算,使用哪種運(yùn)算取決于method 此處method是一個(gè)函數(shù),在這里函數(shù)可以當(dāng)做一個(gè)變量來(lái)使用。

func calculate(x: Double, y: Double, method: (Double, Double) -> Double) -> Double {
    return method(x, y)
}

比如我要做加法運(yùn)算:

func calculate(x: Double, y: Double, method: (Double, Double) -> Double) -> Double {
    return method(x, y)
}

func add(x: Double, y: Double) -> Double {
    return x + y
}

let answer = calculate(x: 5, y: 9, method: add)

這里我們把add函數(shù)當(dāng)做了一個(gè)變量進(jìn)行調(diào)用。但這樣的寫(xiě)法過(guò)于繁瑣,我們可以使用閉包讓代碼更簡(jiǎn)潔,也就是說(shuō)不需要add函數(shù)。

func calculate(x: Double, y: Double, method: (Double, Double) -> Double) -> Double {
    return method(x, y)
}

let answer = calculate(x: 5, y: 9) { (x, y) -> Double in
    return x + y
}

還可以再簡(jiǎn)潔一點(diǎn):

let answer = calculate(x: 5, y: 9) { $0 + $1 }

如果你想做乘法也沒(méi)問(wèn)題:

let answer = calculate(x: 5, y: 9) { $0 * $1 }

閉包

不得不說(shuō),Swift的閉包的確很棒!這里我們以系統(tǒng)自帶的sorted方法講解閉包。
比如我要對(duì)一個(gè)數(shù)組排序:

let numbers = [2,4,1,8,3,7]
numbers.sorted()

系統(tǒng)自帶的方法只能從小到大排序,如果我想從大到小呢?

let numbers = [2,4,1,8,3,7]

func bigToSmall(x: Int, y: Int) -> Bool{
   return x > y
}
numbers.sorted(by: bigToSmall)

Swift追求簡(jiǎn)潔,其實(shí)函數(shù)bigToSmall的定義是多余的??梢允褂瞄]包來(lái)寫(xiě)。

numbers.sorted { (x, y) -> Bool in
    return x > y
}

使用閉包表達(dá)式使代碼達(dá)到最簡(jiǎn):

numbers.sorted { $0 > $1 }

$0代表第一個(gè)(前面一個(gè))數(shù),$2代表第二個(gè)數(shù)(后面一個(gè)),$0 > $1表示前面的數(shù)字是否大于后面的一個(gè)數(shù)字。閉包中,函數(shù)類型,返回值類型均可自動(dòng)推斷

拓展:在一個(gè)字符串?dāng)?shù)組中,篩選出符合條件的字符串

let strArray = ["Apple", "Twitter", "dsskdalo", "NNN", "Google"]

//篩選出字符數(shù)量<=5的字符串
let result = strArray.filter { $0.count <= 5 }
result

//篩選出包含字符“l(fā)”的字符串
let result2 = strArray.filter { $0.contains("l") }
result2

//篩選出首字符為“T”的字符串
let result3 = strArray.filter { $0[$0.startIndex] == "T" }
result3
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 86.復(fù)合 Cases 共享相同代碼塊的多個(gè)switch 分支 分支可以合并, 寫(xiě)在分支后用逗號(hào)分開(kāi)。如果任何模式...
    無(wú)灃閱讀 1,555評(píng)論 1 5
  • Swift 介紹 簡(jiǎn)介 Swift 語(yǔ)言由蘋(píng)果公司在 2014 年推出,用來(lái)撰寫(xiě) OS X 和 iOS 應(yīng)用程序 ...
    大L君閱讀 3,428評(píng)論 3 25
  • 本章將會(huì)介紹 閉包表達(dá)式尾隨閉包值捕獲閉包是引用類型逃逸閉包自動(dòng)閉包枚舉語(yǔ)法使用Switch語(yǔ)句匹配枚舉值關(guān)聯(lián)值原...
    寒橋閱讀 1,628評(píng)論 0 3
  • #閉包(Closures) 本頁(yè)包含內(nèi)容: - 閉包表達(dá)式(Closure Expressions) - 尾隨閉包...
    刺骨寒閱讀 1,355評(píng)論 0 0
  • 我要適應(yīng)一個(gè)陌生的環(huán)境有多難,大一第一個(gè)學(xué)期我勉強(qiáng)的適應(yīng)下來(lái)。那時(shí)我們都是一樣的心理狀態(tài),都沒(méi)有一點(diǎn)感情基礎(chǔ),第二...
    杰科閱讀 200評(píng)論 3 0

友情鏈接更多精彩內(nèi)容