最近在學習swift的時候看了下喵神的一片文章
func greaterThan(comparer: Int) -> Int -> Bool
{
return { $0 comparer }
}
let greaterThan10 = greaterThan(10);
greaterThan10(13) // => true
greaterThan10(9) // => false
一開始沒怎麼看懂之前認為->箭頭就代表返回值,不理解為什麼會有->Int->Bool後來看了看蘋果的官方文檔才知道大神簡化了一下~~
呵呵噠
「Functions are a first-class type. This means that a function can return another function as its value.
func makeIncrementer() -> ((Int) -> Int) {
func addOne(number: Int) -> Int {
return 1 + number
}
return addOne
}
var increment = makeIncrementer()
increment(7)」
摘錄自: Apple Inc. 「The Swift Programming Language (Swift 2.2)。」 iBooks.
事實上是這樣的,Swift中函數是作為一等類型是可以直接當做參數傳遞的。所以喵神的代碼直接省掉了部分邏輯,看起來就比較高逼格了,$0就是代表第一個參數的意思。改一下就變成了:
func greaterThan(comparer: Int) -> ((Int) -> Bool)
{
func numbergreater(num: Int) -> Bool
{
return num > comparer
}
return numbergreater
}
let greaterThan10 = greaterThan(10);
greaterThan10(13) // => true
greaterThan10(9) // => false