正好前段时间在发力理解函数式编程,学习 Swift 至今就想看看 Swift 对函数式编程的支持如何。从变量声明用 let, 以及函数参数的 let 和 var 都非常适合于函数式编程,它们对实例保护的很好。let 和 var 类型的函数参数保证了函数内部操作的是传入参数的深拷贝。
在 Objective-C 中要调用一个函数,除了通过对像为媒介,还能 perform 一个 selector, selector 其实也是定位函数的方式,这更像是反射。其实 C/C++ 的函数指针概念更不错,用于直接定位函数。
所以进一步,函数要成为第一等公民,它本身可以很容易的作为参数传入或作为返回值,即能构成高阶函数。这在 Swift 也是没问题的,我们可以定义函数类型的变量,例如:
1 2 3 4 5 6 7 8 9 10 11 12 |
func addTwoInts(a: Int, _ b: Int) -> Int { return a + b } var addFunction: (Int, Int) -> Int = addTwoInts //addTwoInts 函数类型表示 (Int, Int) -> Int print(addFunction(1, 2)) let add = addTwoInts //自动推断出 add 函数的类型 func foo() { print(123) } let f:()->Void = foo |