0

リアクティブ ココア 4 アクションを観察しているので、アクションの実行時にコードを実行できます。

これが私のアクションの定義です:

buttonAction = Action<Bool, Void, NoError>() { value in

    return SignalProducer<Void, NoError> { observer, _ in
        dataProvider.addNewTestProduct()

        observer.sendNext()
        observer.sendCompleted()
    }

これが私が観察をしている方法です:

vm.buttonAction.events.observeCompleted {
    print("observed completed")
}
vm.buttonAction.events.observeNext {
    print("observed next")
}

次のイベントの監視は正しく機能します。アクションが UIButton によってトリガーされると、print ステートメントが実行されます。

ただし、私の問題は、何らかの理由で完了したイベントの監視がトリガーされないことです。これは ReactiveCocoa のバグでしょうか、それとも間違ったことをしていますか?

ありがとう!

4

1 に答える 1

2

ReactiveCocoa github ページで同じ質問をしたところ、(@ikesyo から) 回答がありました。完全を期すために、ここで答えを提供しています。

これは意図された動作です。署名は public let events:Signal<Event<Output, Error>, NoError>であるため、内部プロデューサーの Completed イベントを次のように観察できます。

vm.buttonAction.events.observeNext { event in
    switch event {
    case let .Next(value): ... // A Next event from the inner producer
    case .Completed: ... // A Completed event from the inner producer
    default: break
    }
}

ソース: https://github.com/ReactiveCocoa/ReactiveCocoa/issues/2784

于 2016-04-12T17:23:39.400 に答える