@Published 属性 在第一个之后不发出事件的单例
@Published property in singleton not emitting events after the first one
我在单例 class 中有一个 @Published
属性 ,它在视图模型 class 中被观察到,它只收到第一个初始值而不是之后.为什么?
查看
import SwiftUI
struct ContentView: View {
@ObservedObject var viewModel = ContentViewModel(singletonService: SingletonService.shared)
var body: some View {
NavigationView {
Form {
Text("Hello World")
}.navigationBarItems(trailing: Button("Increase Number", action: {
SingletonService.shared.increaseNumber()
}))
}
}
}
视图模型
import Combine
class ContentViewModel: ObservableObject {
init(
singletonService: SingletonService
) {
let cencellable = singletonService.$number.sink(receiveValue: { print([=12=]) })
// Never called after the first time
}
}
单例
import Combine
class SingletonService {
static let shared = SingletonService()
@Published var number = 0
func increaseNumber() {
number += 1
}
}
订阅会持续到订阅者还活着,但在您的情况下
let cencellable = singletonService.$number.sink(receiveValue: { print([=10=])
订阅者被断章取义销毁。应该是
private var cancellables = Set<AnyCancellable>()
init(singletonService: SingletonService) {
singletonService.$number
.sink(receiveValue: { print([=11=]) })
.store(in: &cancellables)
}
我在单例 class 中有一个 @Published
属性 ,它在视图模型 class 中被观察到,它只收到第一个初始值而不是之后.为什么?
查看
import SwiftUI
struct ContentView: View {
@ObservedObject var viewModel = ContentViewModel(singletonService: SingletonService.shared)
var body: some View {
NavigationView {
Form {
Text("Hello World")
}.navigationBarItems(trailing: Button("Increase Number", action: {
SingletonService.shared.increaseNumber()
}))
}
}
}
视图模型
import Combine
class ContentViewModel: ObservableObject {
init(
singletonService: SingletonService
) {
let cencellable = singletonService.$number.sink(receiveValue: { print([=12=]) })
// Never called after the first time
}
}
单例
import Combine
class SingletonService {
static let shared = SingletonService()
@Published var number = 0
func increaseNumber() {
number += 1
}
}
订阅会持续到订阅者还活着,但在您的情况下
let cencellable = singletonService.$number.sink(receiveValue: { print([=10=])
订阅者被断章取义销毁。应该是
private var cancellables = Set<AnyCancellable>()
init(singletonService: SingletonService) {
singletonService.$number
.sink(receiveValue: { print([=11=]) })
.store(in: &cancellables)
}