代码之家  ›  专栏  ›  技术社区  ›  coolly

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

  •  0
  • coolly  · 技术社区  · 8 年前

    例如:

    在一个控制器中,实现

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

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

    controller.sendSuccessOrNot().subscribeNext {
    
    }
    

    如何在上述调用中检查sendSuccessOrNot是否在ReactiveCoca中发送错误或成功值。

    1 回复  |  直到 8 年前
        1
  •  2
  •   Charles Maria    8 年前

    你使用的语法让我觉得你在使用Swift,在这种情况下,你不应该使用RACSignal,你应该用 .toSignalProducer()

    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)")
    })