iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 25
1
自我挑戰組

30 天了解 Swift 的 Combine系列 第 25

30 天了解 Swift 的 Combine: [25] 好文分享 從零打造基本版 Combine

  • 分享至 

  • xImage
  •  

之前在 iPlayground 2019 有個分享, 是講如何在 Swift 5.0 之前沒有 Combine 的環境下建立 ReactiveX 的架構. 講者: Hsu Li-Heng 喜歡分享, 特別將講座寫成文章, 這次就來看看這個文章吧

從零打造基本版 Combine 認識 Functional Reactive Programming: link

建造者模式 Builder pattern

文章中分析了 Combine 如何套用設計模式建造者模式(Builder pattern), 首先先解釋建造者模式的步驟.

  1. 先取得一個空的建造者。
  2. 把建構所需的資訊存到建造者裡面。
  3. 呼叫建造者的 build() 方法來建構產品。

Publisher 其實有用有實際執行指令的 Data

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()
    }
}

Operator 實作: map

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 之前.


上一篇
30 天了解 Swift 的 Combine: [24] 分享 SPM 與 CombineHelper
下一篇
30 天了解 Swift 的 Combine: [26] GitHub repo 介紹: CombineDataSource
系列文
30 天了解 Swift 的 Combine30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言