Swift 燒腦體操(三) 高階函式

2021-09-17 07:52:44 字數 1069 閱讀 3215

\\

swift 其實比 objective-c 複雜很多,相對於出生於上世紀 80 年代的 objective-c 來說,swift 融入了大量新特性。這也使得我們學習掌握這門語言變得相對來說更加困難。不過一切都是值得的,swift 相比 objective-c,寫出來的程式更安全、更簡潔,最終能夠提高我們的工作效率和質量。

\\ swift 相關的學習資料已經很多,我想從另外乙個角度來介紹它的一些特性,我把這個角度叫做「燒腦體操」。什麼意思呢?就是我們專門挑一些比較費腦子的語言細節來學習。通過「燒腦」地思考,來達到對 swift 語言的更加深入的理解。

\\ 這是本體操的第三節,練習前請做好準備運動,保持頭腦清醒。

\\\\

在上一節裡面,我們其實已經涉及到了高階函式了。在 wikipedia 中,是這麼定義高階函式(higher-order function)的,如果乙個函式:\\

那麼這個函式就被稱作高階函式。下面是乙個簡單的排序的例子,在這個例子中,傳進去的引數就是乙個函式:

\\

\let numbers = [1, 4, 2, 3]\let res = numbers.sort \
\\\\

上面的**看著不像是函式作為引數存在,這是因為 swift 的 trailing closure 特性。swift 允許當函式的最後乙個引數是閉包的時候,以緊跟的形式,將最後乙個閉包的內容附加在函式後面。

\\ 所以,以下兩行**是等價的:

\\

\// 正常寫法,函式是作為 sort 的引數\arr.sort()\\// trailing closure 寫法,更簡潔明瞭\arr.sort  \
\\\\

高階函式在 swift 語言中有大量的使用場景,我們先來看一看常見的用法:

\\\\

我們可以用map方法來對陣列元素進行某種規則的轉換,例如:

\\

\let arr = [1, 2, 4]\// arr = [1, 2, 4]\\let brr = arr.map \// brr = [\"no.1\

Swift 燒腦體操(三) 高階函式

swift 其實比 objective c 複雜很多,相對於出生於上世紀 80 年代的 objective c 來說,swift 融入了大量新特性。這也使得我們學習掌握這門語言變得相對來說更加困難。不過一切都是值得的,swift 相比 objective c,寫出來的程式更安全 更簡潔,最終能夠提高...

Swift 燒腦體操(三) 高階函式

swift 其實比 objective c 複雜很多,相對於出生於上世紀 80 年代的 objective c 來說,swift 融入了大量新特性。這也使得我們學習掌握這門語言變得相對來說更加困難。不過一切都是值得的,swift 相比 objective c,寫出來的程式更安全 更簡潔,最終能夠提高...

部門工資前三高所有員工

employee 表包含所有員工資訊,每個員工有其對應的工號 id,姓名 name,工資 salary 和部門編號 departmentid id name salary departmentid 1 joe 85000 1 2 henry 80000 2 3 sam 60000 2 4 max 9...