需要重新整理
Event是RAC中事件流所传输的对象,有如下几种:
value Event: 值事件,我们可以通过值事件来告诉观察者产生的数据,比如从服务器请求的数据、进度、模型数组等等。我们再创建事件流的时候会限定其类型,所以这些值事件的value
必须同类型。
failure Event:失败事件,我们可以通过失败事件来告诉观察者发生了什么错误,通过.error
参数来具体描述这个错误,用代码来简单实现一个socket异常断开的失败事件:1
2
3let (signal, observe) = Signal<String, NSError>.pipe()
let error = NSError(domain: "domain", code: -1, userInfo: ["log": "socket disconnected from host"])
observe.send(error: error)
RAC对失败事件的处理和普通的异常一样,一旦发生,后续的任何事件就都不会被发送到事件流中,所以谨慎使用。如果希望即使发生错误后续的事件还能正常发送,那么建议使用合适的值事件来间接描述这个错误。
如果不允许发生失败事件,那么我们再在创建事件流的时候使用NoError
类型,这样就保证了事件流中不会存在失败事件。
completed Event:成功事件,我们可以发送一个成功事件来告诉观察者操作已经成功完成比如下载完成,或者这个数据流被正常终止。成功事件发生之后,后续的事件将不会被发送到事件流中推送给观察者,所以确保与此有关的所有操作都成功之后在发送成功事件。
interrupted Event:中断事件,用于取消已经开始的操作,既非成功、也非失败。
事件流有若干个值事件和最多一个终止事件组组成。