我尝试转换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
在这种情况下您需要
.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")