ReactiveCocoa使用RACSignal和PromiseKit使用Promise来包装值。 它们可以将异步工作链接在一起。 ReactiveCocoa和PromiseKit之间的主要设计区别是什么?
答案 0 :(得分:5)
信号和promise是将异步操作表示为类型值的两种方式,它们可以以回调/通知/委托不能的方式传递,链接,组合,嵌套等。
两者之间的差异就像是正方形和矩形之间的差异,其中所有承诺都是信号,但并非所有信号都是承诺。承诺是信号的一个特定用例。
信号表示任意数量的异步事件的时间线,由完成或故障终止。下图是所有可能的信号 - 以失败或完成结束的任意数量的事件
--------------------Event(eventData)-Completion()
--------------Completion()
Event(eventData)---------Event(eventData)----------Failure(errorData)
-------------------------------------Failure(errorData)
promise表示单个异步事件或单个异步故障。下图表示可能的承诺:
-------Completion(eventData)
----------------------------------------------Completion(eventData)
--------Failure(errorData)
------------------------Failure(errorData)
正如您可能已经看到的那样,任何承诺都可以通过在发送完第一个事件后立即发送完成的信号来表示,如下所示:
-------Event(data)+Completion()
-------------------------------------------Event(data)+Completion()
--------Failure(errorData)
------------------------Failure(errorData)