【问题标题】:How to get error value from a subscribed RACSignal?如何从订阅的 RACSignal 中获取错误值?
【发布时间】:2016-05-26 01:42:16
【问题描述】:

例如:

在一个控制器中,实现

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

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

controller.sendSuccessOrNot().subscribeNext {

}

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

【问题讨论】:

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


    【解决方案1】:

    您使用的语法让我觉得您使用的是 Swift,在这种情况下您不应该使用 RACSignal,您应该使用 .toSignalProducer() 将您的 RACSignal 转换为 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)")
    })    
    

    【讨论】:

    • 你知道在RAC 2.5版本还是2版本中怎么做吗?
    • RAC 2 但在 Swift 中?
    • 哦,是的。我正在快速执行 RAC 并对其进行测试,我想从函数中发送错误,那么我该如何故意发送错误。
    • 已编辑以添加 RAC 2 等效项,但您可能应该使用 RAC 4。
    • 谢谢。但是如何从函数中故意发送错误信号。
    猜你喜欢
    • 1970-01-01
    • 2018-12-11
    • 1970-01-01
    • 2016-07-23
    • 2019-12-25
    • 1970-01-01
    • 2019-03-28
    • 1970-01-01
    • 2016-06-26
    相关资源
    最近更新 更多