ReactiveSwift函數(shù)響應(yīng)式編程庫
ReactiveSwift 是出自 ReactiveCocoa 小組的純 Swift 風(fēng)格 FRP。 ReactiveSwift 提供了可組合、可聲明以及靈活的原語,建立在時間流的大概念之下。
這些原語可用于統(tǒng)一展現(xiàn)通用 Cocoa 以及泛型編程模式,這些都是觀察者的行為基礎(chǔ)。例如委派模式、回調(diào)閉包、通知、控制動作、響應(yīng)者鏈?zhǔn)录uture/Promise 以及 K/V 的監(jiān)控。所有的這些不同的機(jī)制都使用相同的方法進(jìn)行呈現(xiàn),可以很方便的將這些組合在一起,更少的意大利面條式的代碼以及狀態(tài)來彌補(bǔ)其中的縫隙。
示例代碼:
// Purchase from the vending machine with a specific option.
vendingMachine.purchase
.apply(snackId)
.startWithResult { result
switch result {
case let .success(snack):
print("Snack: \(snack)")
case let .failure(error):
// Out of stock? Insufficient fund?
print("Transaction aborted: \(error)")
}
}
// The vending machine.
class VendingMachine {
let purchase: Action<Int, Snack, VendingMachineError>
let coins: MutableProperty<Int>
// The vending machine is connected with a sales recorder.
init(_ salesRecorder: SalesRecorder) {
coins = MutableProperty(0)
purchase = Action(state: coins, enabledIf: { $0 > 0 }) { coins, snackId in
return SignalProducer { observer, _ in
// The sales magic happens here.
// Fetch a snack based on its id
}
}
// The sales recorders are notified for any successful sales.
purchase.values.observeValues(salesRecorder.record)
}
}
編者注:
函數(shù)響應(yīng)式編程(Functional Reactive Programming:FRP)是一種和事件流有關(guān)的編程方式,其角度類似EventSoucing,關(guān)注導(dǎo)致狀態(tài)值改變的行為事件,一系列事件組成了事件流。FRP是更加有效率地處理事件流,而無需顯式去管理狀態(tài)。
具體來說,F(xiàn)RP包括兩個核心觀點(diǎn):
-
事件流,離散事件序列
-
屬性properties, 代表模型連續(xù)的值。
一系列事件是導(dǎo)致屬性值發(fā)生變化的原因。FRP非常類似于GOF的觀察者模式。
評論
圖片
表情
