Swiftui 如何";“前进”;a@公布的价值
我对SwiftUI和Combine非常陌生,尽管我对Swift有丰富的经验,对ReactiveKit也有一点了解,但我发现很难让一些基本的东西发挥作用 例如,我试图在我的ViewModel上添加一个Swiftui 如何";“前进”;a@公布的价值,swiftui,combine,Swiftui,Combine,我对SwiftUI和Combine非常陌生,尽管我对Swift有丰富的经验,对ReactiveKit也有一点了解,但我发现很难让一些基本的东西发挥作用 例如,我试图在我的ViewModel上添加一个isLoggedIn属性,它应该只是“转发”UserManagerclass'isLoggedIn属性。对于ReactiveKit,这相当简单,但是对于SwiftUI/Combine,我无法让它工作。该值只设置一次,然后再也不会更新 class用户管理器:observeObject{ @已发布私有(集
isLoggedIn
属性,它应该只是“转发”UserManager
class'isLoggedIn
属性。对于ReactiveKit,这相当简单,但是对于SwiftUI/Combine,我无法让它工作。该值只设置一次,然后再也不会更新
class用户管理器:observeObject{
@已发布私有(集合)变量isLoggedIn=false
//这个类拥有所有实际的登录逻辑,
//跟踪登录用户和身份验证状态等。
}
类ViewModel:ObservableObject{
@已发布的var isLoggedIn=false
私有let userManager:userManager
init(userManager:userManager){
self.userManager=userManager
isLoggedIn=userManager.isLoggedIn/以下功能应该可以正常工作。如果不存储订阅服务器,它将自动取消
private var subscribers = [AnyCancellable]()
init(userManager: UserManager) {
self.userManager = userManager
userManager.$isLoggedIn
.assign(to: \.isLoggedIn, on: self)
.store(in: &subscribers) // << subscriber must be kept
}
private var subscribers=[anycancelable]()
init(userManager:userManager){
self.userManager=userManager
userManager.$isLoggedIn
.assign(到:\.isLoggedIn,开:self)
.store(in:&subscribers)/另一种方法是用手动objectWillChange替换ViewModel中的@Published var isLoggedIn
class ViewModel: ObservableObject {
var isLoggedIn: Bool {userManager.isLoggedIn}
private let userManager: UserManager
private var anyCancellable: AnyCancellable?
init(userManager: UserManager) {
self.userManager = userManager
anyCancellable = userManager.objectWillChange.sink {[weak self] _ in
self?.objectWillChange.send()
}
}
}
谢谢,这很有道理。