Swift 函數和閉包

最近在學習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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 为何叫做 shell ? shell prompt(PS1) 与 Carriage Return(CR) 的关系?...
    Zero___阅读 3,192评论 3 49
  • 程序員創業白皮書 作者:Paul Graham Paul Graham是程序員,專欄作家。他在1995年創建了第一...
    刘立山John阅读 1,992评论 0 20
  • 電影向。Magnus/Alec很久以前合本的文,其實爛尾了.....(抹臉)一個馬格努斯突然變成貓,怎樣都變不回來...
    十字路口霉少年阅读 1,420评论 0 2
  • 大学毕业后,找了很多工作,填了很多简历,都是无疾而终。后来,我对找工作没有一点信心了,整天宅在家里上网,看电影,借...
    掩饰等于无奈阅读 162评论 0 0
  • 汪国真诗词精选 热爱生命: 我不去想是否能够成功 既然选择了远方 便只顾风雨兼程 山高路远:...
    V南芥阅读 508评论 0 2