比如我们要实现一个+1的功能,我们可以这样写
1 2 3
| func addOne(num: Int) -> Int { return num + 1 }
|
坏处就在于这个函数不能复用,如果是一些需要常用的方法,可以柯里化出一个函数模板
1 2 3 4 5
| func adder(_ adder: Int) -> (Int) -> Int { return { num in return num + adder } }
|
addTwo是一个(Int) -> Int类型的闭包,吃一个Int类型,所以就是返回6 + 2
我们可以对这个闭包进行复用
1 2 3
| let addTwo = adder(2) let result = addTwo(6) print(result)
|
另外一个柯里化的例子
1 2 3 4 5 6
| func greaterThan(_ comparer: Int) -> (Int) -> Bool { return { $0 > comparer } } let greaterThan10 = greaterThan(10); greaterThan10(13) greaterThan10(9)
|
关于逃逸闭包(暂时就先写在这篇吧)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| import UIKit
func doWork(block: ()->()) { block() }
func doWorkAsync(block: @escaping ()->()) { DispatchQueue.main.async { block() } }
class Test { var foo = "a" func method1() { doWork { print(foo) } foo = "b" } func method2() { doWorkAsync { print(self.foo) } foo = "b" } func method3() { doWorkAsync { [weak self] in print(self?.foo ?? "nil") } foo = "b" } } Test().method1() Test().method2() Test().method3()
|