Rol*_*tte 11 observable swift combine
按照Foo2类示例,我曾经将我的对象作为ObservableObject,我可以设置一个@Published值并监听它们的更改,就像使用合并一样。
现在我正在使用示例@Observable中所示的宏Foo1,我无法创建类似管道的组合。
@Observable有没有一种方法可以像我在使用@Published对象中的宏值时使用的方式来监听宏值ObservableObject?
@Observable class Foo1 {
var isEnabled = false
init() {
isEnabled
.map { $0 } // Error: Value of type 'Bool' has no member 'map'
}
}
class Foo2: ObservableObject {
@Published var isEnabled = false
var cancellables = Set<AnyCancellable>()
init() {
$isEnabled
.map { $0 } // Works like a charm
.sink { print($0.description) }
.store(in: &cancellables)
}
}
Run Code Online (Sandbox Code Playgroud)
这似乎是一个限制,Apple 似乎没有在任何地方提到这种模式,很可能是因为在大多数情况下,您应该使用onChange().
要解决此限制,您可以创建一个与@Published使用CurrentValueSubject创建的发布者类似的发布者:
import Combine
@Observable class Foo1 {
var isEnabled = false {
didSet { isEnabled$.send(isEnabled) }
}
var isEnabled$ = CurrentValueSubject<Bool, Never>(false)
var cancellables = Set<AnyCancellable>()
init() {
isEnabled$
.map { $0 }
.sink { print($0.description) }
.store(in: &cancellables)
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
601 次 |
| 最近记录: |