如何从订阅的RACSignal获取错误值?

时间:2016-05-26 01:42:16

标签: ios swift functional-programming reactive-programming reactive-cocoa

例如:

在一个控制器中,实现

func sendSuccessOrNot()->RACSignal {
// code here
}

在另一个控制器中,调用该信号

controller.sendSuccessOrNot().subscribeNext {

}

如果sendSuccessOrNot在ReactiveCocoa中发送错误或成功值,如何检查上述调用。

1 个答案:

答案 0 :(得分:2)

您使用的语法让我认为您正在使用Swift,在这种情况下您不应该使用RACSignal,您应该将您的RACSignal转换为具有.toSignalProducer()的SignalProducer

func sendSuccessOrNot() -> RACSignal {
    return RACSignal.createSignal { (subscriber) -> RACDisposable! in
        let test = true
        if (test) {
            subscriber.sendNext("Value")
            subscriber.sendCompleted()
        } else {
            subscriber.sendError(NSError(domain: "", code: 0, userInfo: nil))
        }
        return RACDisposable(block: {})
    }
}

controller.sendSuccessOrNot().toSignalProducer().on(next: { value in
    print("next: \(value)")
}, 
failed: { error in
    print("failed: \(error)")
}).start()

如果您仍在使用RAC 2,那么

controller.sendSuccessOrNot().subscribeNext({ value in
    print("next: \(value)")
}, error: { error in
    print("failed: \(error)")
})