В чем основное различие между ReactiveCocoa и PromiseKit?

ReactiveCocoa использует RACSignal, а PromiseKit использует Promise для переноса значений. Они оба могут связывать асинхронные работы вместе. В чем основное отличие дизайна ReactiveCocoa от PromiseKit?


person drinking    schedule 18.01.2016    source источник
comment
Обещания: ноль или одно значение. Сигналы: ноль или более значений.   -  person Ian Henry    schedule 20.01.2016


Ответы (1)


сигналы и промисы — это два способа представления асинхронных операций в виде типизированных значений, которые можно передавать, соединять в цепочки, компоновать, вкладывать и т. д. способами, недоступными для обратного вызова/уведомления/делегата.

разница между ними подобна разнице между квадратом и прямоугольником, где все обещания являются сигналами, но не все сигналы являются обещаниями. обещание — это один конкретный вариант использования сигнала.

сигнал представляет собой временную шкалу любого количества асинхронных событий, завершающихся завершением или сбоем. На следующих диаграммах показаны все возможные сигналы — любое количество событий, заканчивающихся сбоем или завершением.

--------------------Event(eventData)-Completion()

--------------Completion()

Event(eventData)---------Event(eventData)----------Failure(errorData)

-------------------------------------Failure(errorData)

обещание представляет собой одно асинхронное событие или одиночный асинхронный сбой. следующие диаграммы представляют возможные обещания:

-------Completion(eventData)

----------------------------------------------Completion(eventData)

--------Failure(errorData)

------------------------Failure(errorData)

как вы, наверное, уже заметили, любое обещание может быть представлено сигналом, который отправляет завершение сразу после отправки своего первого события, например:

-------Event(data)+Completion()

-------------------------------------------Event(data)+Completion()

--------Failure(errorData)

------------------------Failure(errorData)
person Evan Drewry    schedule 10.10.2016