我的应用程序具有收藏对象的功能。有多个视图需要访问[Favorite]
才能呈现UI以及添加和删除UI。
我希望有一个[Favorite]
的来源,
UserDefaults
我尝试使用@Binding
链接源,但是更改源时它不会更新UI。
class Singleton {
static let shared = Singleton()
var favorites = CurrentValueSubject<[Favorite], Never>(someFavorites)
}
class ViewModel: ObservableObject {
@Binding var favorites: [Favorite]
init() {
_favorites = Binding<[Favorite]>(get: { () -> [Favorite] in
Singleton.shared.favorites.value
}, set: { newValue in
Singleton.shared.favorites.send(newValue)
})
}
}
我还尝试使用Publishers
和Subscribers
创建绑定,但是最终陷入无限循环。
预先感谢
答案 0 :(得分:3)
这是可行的方法。经过Xcode 11.5b2的测试。
class Singleton {
static let shared = Singleton()
// configure set initial value as needed, [] used for testing
var favorites = CurrentValueSubject<[Favorite], Never>([])
}
class ViewModel: ObservableObject {
@Published var favorites: [Favorite] = []
private var cancellables = Set<AnyCancellable>()
init() {
Singleton.shared.favorites
.receive(on: DispatchQueue.main)
.sink { [weak self] values in
self?.favorites = values
}
.store(in: &cancellables)
}
}