2

SignalProducer<AnyObject?, NSError>a を返す関数があり、プロデューサーを multiple にバインドしたいとしましょうMutableProperty<String>。したがって、次のようなものです。

let foo = SignalProducer<AnyObject?, NSError>(value: nil)
let someProperty1 = MutableProperty<String>("")
let someProperty2 = MutableProperty<String>("")

someProperty1 <~ foo
    .flatMapError { _ in
        SignalProducer<AnyObject?, NoError>.empty
    }
    .map { _ in
        return "test"
    }

// someProperty2 <~ foo etc...

自分の機能 (ネットワーク関連のものなど) が複数回実行されるのを避けるために、マルチキャストを使用する必要があります。CHANGELOGからわかる限り、これにstartWithSignal使用する演算子です。ただし、宣言的な方法でこれを行う方法がわかりません。

したがって、1 つのアプローチは、 のクロージャでバインディングを作成することですstartWithSignal

foo.startWithSignal { signal, disposable in
    someProperty1 <~ signal
        .map { _ in
            return "test"
        }

    // someProperty2 <~ signal etc...
}

ただし、NSErrorパーツを削除する必要があるため、これは明らかに失敗します。Signal(の反対に)を与えているため、 ( RAC4 では、RAC3 では)SignalProducerは使用できません。どうすれば私たちのためにこれを行うことができるのですか?最後に、これが RAC3/RAC4 でマルチキャストを処理する適切な方法であるかどうかさえ確信が持てませんか?flatMapErrorcatchmapError

どんな助けでも大歓迎です。

4

2 に答える 2