私のアプリは進行状況の情報を表示するステータス領域を上部に持っています(XcodeとiTunesに似ています)。ストリームの値をProgressUpdate値に変換するクロージャを使用して、イベントストリームに副作用を注入することによって、このイベントを更新したいと考えています。私はSignalProducerの拡張機能を使用していますので、私のアプリのシグナルプロデューサーは、アプリケーションのステータスエリアを更新できます(複数のシグナルを一度に許可するためにはもっと複雑ですが、この問題には影響しません)。SignalProducerに副作用を一般的に注入する
私はこれをSignalProducerのon(開始:、started :, ...)に基づいています。エラータイプの制約を許すためには最新のswift 3.1 betaが必要ですが、これは遊び場からまっすぐです。
import ReactiveSwift
struct Rc2Error: Error {
}
struct ProgressUpdate {
let message: String
let value: Double = -1
}
class MacAppStatus {
fileprivate func process(event: (Event<ProgressUpdate, Rc2Error>) -> Void)
{
//update UI based on the event
}
}
extension SignalProducer where Error == Rc2Error {
func updateProgress<Value>(status: MacAppStatus, converter: @escaping (Value) -> ProgressUpdate) -> SignalProducer<Value, Error>
{
return SignalProducer<Value, Error> { observer, compositeDisposable in
self.startWithSignal { signal, disposable in
compositeDisposable += disposable
compositeDisposable += signal
.on(event: { (orignal) in
switch original {
case .completed:
status.process(Event<ProgressUpdate, Rc2Error>.completed)
case .interrupted:
status.process(Event<ProgressUpdate, Rc2Error>.interrupted)
case .failed(let err):
status.process(Event<ProgressUpdate, Rc2Error>.failed(err))
case .value(let val):
status.process(Event<ProgressUpdate, Rc2Error>.value(converter(val)))
}
})
.observe(observer)
}
}
}
}
`` `
.observe(observer)
の最後の行は、エラー生成します。
error: cannot convert value of type 'Observer<Value, Rc2Error>' to expected argument type 'Observer<_, Rc2Error>'
この変換が失敗した理由を任意のアイデア?これを達成する別の方法の提案?
Typo? '.on(イベント:{(orignal)'の代わりに 'オリジナル' –
とそれ以外のいくつかのタイプミス –