gpt4 book ai didi

ios - 使用 swift 在 ReactiveCocoa 中进行 flattenMap 和错误处理

转载 作者:行者123 更新时间:2023-11-28 11:20:27 31 4
gpt4 key购买 nike

看完下面的教程http://www.scottlogic.com/blog/2014/07/24/mvvm-reactivecocoa-swift.html我正在尝试在我的应用程序中使用 ReactiveCocoa 和 Swift。当按下按钮时,我请求检查服务器是否响应:

_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: {})

当在 flattenMap 中调用 sendError() 时,当我按下按钮时,信号不再发出。只要我仅发出 sendNext()sendCompleted(),它就可以正常工作。

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

最佳答案

sendError 导致信号终止。来自ReactiveCocoa Design Guidelines :

In RAC, error events have exception semantics. When an error is sent on a signal, it will be immediately forwarded to all dependent signals, causing the entire chain to terminate.

如果你想从你创建的 RACSignal 中 sendError 你需要使用类似 -catch: 运算符的东西来处理它下游(在 subscribeNext 之前)所以它不会终止信号。

关于ios - 使用 swift 在 ReactiveCocoa 中进行 flattenMap 和错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28651510/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com