ReactiveCocoa 4:观察一个动作已完成的事件

时间:2016-04-07 16:00:45

标签: ios swift reactive-cocoa reactive-cocoa-4

我正在观察一个被动的可可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中的错误还是我做错了什么?

谢谢!

1 个答案:

答案 0 :(得分:2)

我在ReactiveCocoa github页面上问了同样的问题并得到了答案(来自@ikesyo)。为了完整起见,我在这里提供答案:

这是预期的行为。由于签名是公共允许事件:Signal<Event<Output, Error>, NoError>,您可以按如下方式观察内部制作人的已完成事件:

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