快速在ReactiveCocoa中进行flattenMap和错误处理

帕乌布

阅读以下教程http://www.scottlogic.com/blog/2014/07/24/mvvm-reactivecocoaa-swift.html之后,我尝试将ReactiveCocoa与Swift和in应用一起使用。当按下按钮时,我正在请求检查服务器是否响应:

_checkButton.rac_signalForControlEvents(UIControlEvents.TouchUpInside)
.flattenMap({(text: AnyObject!) -> RACStream! in
  return RACSignal.createSignal({ (subscriber: RACSubscriber!) -> RACDisposable! in
    Alamofire.request(.GET, "http://google.com")
    .validate(statusCode: 200..<300)
    .response{ (_, _, _, error) in
      if(error == nil) {
        subscriber.sendNext(true)
        subscriber.sendCompleted()
      } else {
        subscriber.sendError(error)
      }
    })
}).subscribeNextAs({ (value: AnyObject) -> () in
  println("success")
}, error: { (error: NSError) -> () in
  println("error")
}, completed: {})

sendError()被调用flattenMap的信号是,当我按下按钮,没有更多的emmited。只要我发出信号sendNext()它就可以正常工作sendCompleted()

任何有关如何解决此问题的线索将不胜感激。

帕特里克·培根

sendError导致信号终止。根据《ReactiveCocoa设计指南》

在RAC中,错误事件具有异常语义。当在信号上发送错误时,它将立即转发到所有相关信号,从而导致整个链终止。

如果sendError要从创建的RACSignal中进行-catch:操作,则需要使用类似运算符的操作在下游(在subscribeNext之前)对其进行处理,以便它不会终止信号。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章