如何使用 NSObject.KeyValueObservingPublisher 获取新值和旧值

问题描述 投票:0回答:1

我尝试转换KVO代码来使用

Combine
,我遇到了同时获取旧值和新值的问题。
我对此一无所知。
有人可以帮助我吗?

class Person: NSObject {
    @objc dynamic var name: String
    
    init(name: String) {
        self.name = name
    }
}

let person = Person(name: "John")
let cancellable = person.publisher(for: \.name, options: [.initial, .new, .old])
    .sink { value in
        print("Person's name: \(value)")
    }
person.name = "Allen"

// Result
// --------------------
// Person's name: John    works for .initial
// Person's name: Allen   works for .new
swift combine
1个回答
0
投票

在这种情况下您需要

.scan
运算符,请尝试以下操作:

let person = Person(name: "John")
let cancellable = person.publisher(for: \.name)
    .scan(("", ""), { ($0.1, $1) }) //<- here
    .sink { value in
        print("Person's name: \(value)")
    }


//Output:
//Person's name: ("", "John")
//Person's name: ("John", "Allen")
© www.soinside.com 2019 - 2024. All rights reserved.