Swift中柯里化

####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)
最近的文章

RXSWift-RxAlamofire 的使用和封装

RXSWift-RxAlamofire 的使用和封装######首先对RxAlamofire的介绍 :RxAlamofire是包装优雅的HTTP网络迅速Alamofire的RxSwift的扩展版。1.介绍RxAlamofire github的readme提供的几种方法具体不展开 请自己看https: …

于 继续阅读