FunctionalSwift
嘿!欢迎使用FunctionalSwift,这是我们在HCA使用Swift语言采用函数式编程风格的框架。
目录 |
---|
安装 |
使用 |
贡献 |
许可 |
安装
Carthage
如果您使用Carthage,请将以下行添加到您的 Cartfile
github "HCAHealthcare/FunctionalSwift" ~> 1.0
然后运行 carthage bootstrap
有关Carthage使用的更多信息,请查看他们官方文档
Cocoapods
如果您使用Cocoapods,请将这些行添加到您的 Podfile
use_frameworks!
pod 'FunctionalSwift', '~> 1.0'
然后,运行 pod install
有关Cocoapods的详细介绍,请查看他们官方文档
使用说明
首先,您需要导入框架
import FunctionalSwift
常用运算符
正向应用 |>
将数据传入函数
示例
let result = "String Data"
|> stringToResult
反向应用 <|
将数据传入函数
示例
let utf8String = flip(curry(String.init(data:encoding:)))
<| .utf8
单类型组合 <>
组合两种返回相同类型的函数
示例
let backgroundViewStyle = set(\UIView.backgroundColor, .white)
<> set(\UIView.translatesAutoresizingMaskIntoConstraints, false)
正向组合 >>>
组合两种返回相同或不同类型的函数
示例
let isSuccess = utf8String // Data -> String
>>> boolValue // String -> Bool
let result = dataResponse
|> isSuccess
常用函数
curry
将多参数函数转换为返回函数的纯函数,从而可以链式添加输入
示例
let stringFromData = String.init(data:encoding) // (Data, String.Encoding) -> String?
let curriedStringFromData = curry(stringFromData) // (Data) -> (String.Encoding) -> String?
flip
常与curry一起使用。flip交换了currying输入的执行顺序
示例
let stringFromData = String.init(data:encoding) // (Data, String.Encoding) -> String?
let curriedStringFromData = curry(stringFromData) // (Data) -> (String.Encoding) -> String?
let flippedStringFromData = flip(curriedStringFromData) // (String.Encoding) -> (Data) -> String?
let utf8String = .utf8 |> flippedStringFromData // (Data) -> String?
set
使用Swift的Keypaths进入Root类型,在给定路径上设置值并返回原始Root值的副本
示例
let backgroundView = self.view
|> set(\UIView.backgroundColor, .white) //Root => UIView, Path => UIColor
<> set(\.translatesAutoresizingMaskIntoConstraints, false) //Root => UIView, Path => Bool
贡献
我们欢迎所有贡献,请提交拉取请求;如果您遇到任何问题,请创建问题。
许可协议
此项目采用Apache 2.0 许可协议。更多信息请参阅 许可协议