####Swift中的柯里化
1.Swift 里可以将方法进行柯里化 (Currying),这是也就是把接受多个参数的方法进行一些变形,使其更加灵活的方法。函数式的编程思想贯穿于 Swift 中,而函数的柯里化正是这门语言函数式特点的重要表现。curry 是 Swift 中一个很灵活的特性,用最简单的语言来说,curry 就是一个用方法生成方法的机制。它能让我们的方法定义更加动态化,甚至对于系统内置的方法,都可以通过 curry 的方法进行整合。我最先是在王巍的swift tip中看到的http://swifter.tips/currying/ 最近在看Argo解析的列子中有使用
2.举个例子
对2数相乘的定义
class Curring {
func multiple(left: Int)(right:Int) -> Int {
return left * right
}
}
let curringinstance = Curring()
curringinstance.multiple(3)(right: 3) // 9
如果我们要更加泛型的对其定义
先定义你想实现功能的函数
func multiple(left: Int, right:Int) -> Int {
return left * right
}
用一个方法生成一个方法 用curry 函数的返回值类型是 (Int -> (Int -> Int))
func curry(function: (Int,Int) -> Int) -> (Int -> (Int -> Int)){
return { a in
{ b in
return function(a,b)
}
}
}
调用
let curriedMultiple = curry(multiple)
curriedMultiple(3)(3) //9
在github有对curry封装的第三方https://github.com/thoughtbot/Curry
工程导入这个库 还有这个库支持多参数
func multiple(left: Int, right:Int) -> Int {
return left * right
}
curry(multiple)(3)(3)