ReactiveCocoa的另外一種流:信號

2018-08-01 14:38 更新

本篇我們介紹ReactiveCocoa的另一種類型的流,即信號。信號是push-driven的,這點與序列流正好相反,新值雖然能夠通過管道進行發(fā)布卻不能像pull-driven一樣在管道中獲取,它們所抽象出來的數據只會在以后的某個時間進行傳送。

這里需要理解兩個概念:pull-drivenpush-driven.

Push-driven means that values for the signal are not defined at the moment of signal creation and may become available at a later time (for example, as a result from network request, or any user input).

Push-driven : 在創(chuàng)建信號的時候,信號不會被立即賦值,之后才會被賦值(舉個栗子:網絡請求回來的結果或者是任意的用戶輸入的結果)

Pull-driven means that values in the sequence are defined at the moment of signal creation and we can query values from the stream one-by-one.

Pull-driven : 在創(chuàng)建信號的同時序列中的值就會被確定下來,我們可以從流中一個個地查詢值。

信號發(fā)送三種類型的值:Next Values代表了下一個發(fā)送到管道內的值。Error Value代表signal無法成功完成,一般很少見,我們會在下一章學習怎么使用她們。Completion Values代表signal成功完成,我們也會在下一章來學習。這里要注意的是:

一個事情響應中,一個signal(信號)發(fā)送了一個Error value或者一個Completion Value后,就不會再發(fā)送任何其他的value. 錯誤或者成功將只會發(fā)送其中一個,絕不會有兩個同時發(fā)送的情況!

信號是ReactiveCocoa的核心組件之一。ReactiveCocoa為UIKit的每一個控件內置了一套信號選擇器。例如,UITextField就有一個rac_textSignal,UITextField中每一次按鍵的響應都會通過它發(fā)送出去。下一章我們會學習如何使用信號來執(zhí)行任務。

ClassDiagram

信號也可以被鏈接(鏈式調用)和轉化。通過映射或者過濾一個流得到的新的流也可以隨后被映射、被過濾,進行所有你能想到的各種操作。在下一章中我們會更多的介紹這方面的內容。


以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號