2017-09-13 25 views
0

通知から2つの信号があります。これらは外部フレームワークから発せられた場所です。2つの信号をORと組み合わせる方法

let successSignal = NotificationCenter.default.reactive.notifications(forName: NSNotification.Name(rawValue: "someNotification")) 
let failedSignal = NotificationCenter.default.reactive.notifications(forName: NSNotification.Name(rawValue: "someNotification")) 

これを1つの信号Signal<Notification, Error>に結合したいとします。 successSignalが送信された場合、failedSinalが送信された場合、エラーが送信されます。

これをどのように管理するかわかりません。ここで

答えて

0

がこれを行うための方法です。この新しい信号のため

enum SignalErrors: Error { 
    case failedSignalValue 
} 

let failingFailed = failedSignal.flatMap(FlattenStrategy.latest) { _ in 
    return SignalProducer<Int, SignalErrors>(error: SignalErrors.failedSignalValue) 
} 

を、failedSignal上の値はそうfailingFailedfailedSignalのイベントは今.failedとして到着れている信号であり、errorイベントに変換されます.valueの代わりに

Event Stream Grammarを覚えておいてください。.failedイベントの後、シグナルは終了します。

let merged = Signal.merge([ 
    successSignal 
     .promoteError(SignalErrors.self), 
    failingFailed 
]) 

その後、我々は一緒にsuccessSignalfailingFailed信号をマージします。 Since a .failed event behaves like an exception and propagates immediatelyの場合、.failedイベントがfailingFailedに到着すると、マージされた信号全体がすぐに失敗します。

promoteErrorsuccessSignal)は、タイプチェックの理由から必要です。

関連する問題