functionOne
需要返回具有
chainedFunction
实例方法,它本身需要返回具有
anotherChain
实例方法等。为此,需要创建一个类型。我将其命名为包装器,因为我不知道您的用例,但您应该给它命名一些更有意义的名称。
import Foundation
struct Wrapper<T> {
let value: T
init(_ value: T) { self.value = value }
func chainedFunction<R>(_ transform: (T) -> R) -> Wrapper<R> {
return Wrapper<R>(transform(self.value))
}
func anotherChain<R>(_ transform: (T) -> R) -> Wrapper<R> {
return Wrapper<R>(transform(self.value))
}
func lastInTheChain<R>(_ transform: (T) -> R) -> R {
return transform(self.value)
}
}
Wrapper("123")
.chainedFunction { string -> Int in
return Int(string)! + 456
}
.anotherChain {
[NSNumber(value: $0), String($0)]
}
.lastInTheChain {
print("value 1: \($0[0])")
print("value 2: \($0[1])")
}
术语:本
Wrapper
类型称为a
functor
,因为它定义了
map
方法(此处调用
链式函数
和
另一条链
,在示例中是等效函数)。使用
地图
,一个可用于转换的闭包
T
到
R
(transform)可用于转换
Wrapper<T>
变成一个
Wrapper<R>
。