CombineExt

为 Combine 框架提供额外功能的 Swift 库。

ValueSubject

封装值的引用类型,并允许发布对其的更改。

struct State: Equatable {
    var counter: Int
    var toggle: Bool
}

@ValueSubject
var subject: State = .init(counter: 0, toggle: false)

@ValueSubject
var newCounterSubject: Int
_newCounterSubject = _subject.observe(keyPath: \.counter)

var newCounterStates: [Int] = []
$newCounterSubject.sink { state in
    newCounterStates.append(state)
}.store(in: &observers)

newCounterSubject += 1 // will trigger subject update