`

swift 必包

 
阅读更多
import Cocoa

let names = ["Chris", "Alex", "Ewa", "Barry", "Daniella"]
func backwards(s1:String,s2:String) -> Bool{
    return s1 > s2
}
sort(names,backwards)

 上面的必包是用来排序的。必包的定义形式为:

{ (parameters) -> returnType in
    statements
}

 捕获值

func makeIncrementor(forIncrement amount: Int) -> () -> Int {
    var runningTotal = 0
    func incrementor() -> Int {
        runningTotal += amount
        return runningTotal
    }
    return incrementor
}

makeIncrementor函数,包含了一个叫做incrementor嵌套函数。 嵌套函数incrementor从上下文中捕获了两个值,runningTotal和amount。 之后makeIncrementor将incrementor作为闭包返回。 每次调用incrementor时,其会以amount作为增量增加runningTotal的值。

 

let incrementByTen = makeIncrementor(forIncrement: 10)

 我们对返回的必包进行调用

 

incrementByTen()
// 返回的值为10
incrementByTen()
// 返回的值为20
incrementByTen()
// 返回的值为30

 我们在进行调用

 

let incrementBySeven = makeIncrementor(forIncrement: 7)
incrementBySeven()
// 返回的值为7
incrementByTen()
// 返回的值为40

 上面的例子中,incrementBySeven和incrementByTen是常量,但是这些常量指向的闭包仍然可以增加其捕获的变量值。 这是因为函数和闭包都是引用类型。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics