関数multiply()
とconvert()
(概念の最小限の例、実際には各関数内のリモートサーバーにクエリを実行することを計画しています)、実装するより短い方法は何multiplyAndConvert()
ですか?
// call two async functions passing the result the from the first
// as the argument to the second
multiplyAndConvert(3).startWithResult { val in
print("\(val.value!)")
}
func convert(_ val: Int) -> SignalProducer<String, NSError> {
return SignalProducer<String, NSError> { observer, _ in
observer.send(value: String(val))
observer.sendCompleted()
}
}
func multiply(_ val: Int) -> SignalProducer<Int, NSError> {
return SignalProducer<Int,NSError> { observer, _ in
observer.send(value: val * 2)
observer.sendCompleted()
}
}
func multiplyAndConvert(_ val: Int) -> SignalProducer<String, NSError> {
return SignalProducer<String, NSError> { observer, _ in
multiply(val).startWithResult { res2 in
switch res2 {
case .success(let val2):
convert(val2).startWithResult { res3 in
switch res3 {
case .success(let val3):
observer.send(value:val3)
observer.sendCompleted()
case .failure(let err):
observer.send(error:err)
}
}
case .failure(let err):
observer.send(error: err)
}
observer.sendCompleted()
}
}
}
これを行うにはもっとエレガントな方法が必要であることは知っていますが、それが何であるかについては困惑しています。map、flatMap、flatten、およびその他のほとんどの関数をいじってみましたが、より良い解決策が見つかりません。