之前在 iPlayground 2019 有個分享, 是講如何在 Swift 5.0 之前沒有 Combine 的環境下建立 ReactiveX 的架構. 講者: Hsu Li-Heng 喜歡分享, 特別將講座寫成文章, 這次就來看看這個文章吧
文章中分析了 Combine 如何套用設計模式建造者模式(Builder pattern), 首先先解釋建造者模式的步驟.
struct Publisher<Value> {
let subscribe: (@escaping (Value) -> Void) -> Void
}
由於需要處理取消與生命週期結束了問題, 作者借鑒了 Combine 的 Cancelable:
class Subscription {
let cancel: () -> Void
init(cancel: @escaping () -> Void) {
self.cancel = cancel
}
deinit {
cancel()
}
}
extension Publisher {
func map<NewValue>(_ transform: @escaping (Value) -> NewValue) -> Publisher<NewValue> {
return Publisher<NewValue> { newValueHandler in
return self.subscribe { value in
let newValue = transform(value)
newValueHandler(newValue)
}
}
}
}
如此一來, 就可以在 iOS 12.4 以前使用 Apple 的響應式名詞, 另外 OpenCombine 是目前在 GitHub 執行的一個開源專案, 目的就是把 Combine 帶入 Swift 5.0 之前.