Swift 绑定到多个视图的单例发布服务器 概述
我的应用程序具有偏爱对象的功能。有多个视图需要访问Swift 绑定到多个视图的单例发布服务器 概述,swift,swiftui,combine,Swift,Swiftui,Combine,我的应用程序具有偏爱对象的功能。有多个视图需要访问[Favorite]才能呈现UI以及添加和删除它们 我想要一个[收藏夹]的单一来源,其中: 所有视图都基于它呈现UI 更新此源会向订阅它的所有视图发出信号,并根据更新后的值重新提交 每次更新时,源代码都会保存在UserDefaults 从UI更新收藏夹也会更新单例的源代码,因此需要更新其他视图 尝试1 我试图使用@Binding链接源代码,但当源代码更改时,它不会更新UI class Singleton { static let sha
[Favorite]
才能呈现UI以及添加和删除它们
我想要一个[收藏夹]
的单一来源,其中:
UserDefaults
尝试1 我试图使用
@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)
})
}
}
类单例{
静态let shared=Singleton()
var favorites=CurrentValueSubject(someFavorites)
}
类ViewModel:ObservableObject{
@绑定变量收藏夹:[收藏夹]
init(){
_收藏夹=绑定(在中获取:{()->[Favorite]
Singleton.shared.favorites.value
},设置:{newValue in
Singleton.shared.favorites.send(newValue)
})
}
}
尝试2 我还尝试使用
发布者
和订阅者
创建绑定,但最终会出现无限循环
提前感谢这里是可能的方法。使用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)
}
}
类单例{
静态let shared=Singleton()
//根据需要配置设置初始值,[]用于测试
var favorites=CurrentValueSubject([])
}
类ViewModel:ObservableObject{
@已发布的变量收藏夹:[收藏夹]=[]
private var cancelables=Set()
init(){
Singleton.shared.favorites
.receive(在:DispatchQueue.main上)
.sink中的{[弱自我]值
self?.favorites=值
}
.store(在:&可取消项中)
}
}
更新主队列中的用户界面。感谢您的评论,代码肯定会自动将用户界面更新为Singleton的源代码更新。然而,我必须道歉,因为我没有包括我的第四个要求。我希望在视图更新源代码时更新Singleton的源代码,从而向其他视图发送更新信号。本质上是将ViewModels的源绑定到Singleton的源。