SwiftUI ObservableObject 在发布值时不会更新

标签 swiftui observable observableobject observedobject

我有一个 View 和一个 View 模型,当用户被添加到用户数组时,它应该更新 ListView。我可以验证是否正在添加用户,但 ObservedObject 没有更新。
我有一个搜索栏,可让您搜索用户,然后更新 ViewModel 中的用户数组,该数组本应更新 View ,但事实并非如此。
View 模型

class UsersViewModel: ObservableObject {
    @Published var users: [User] = []
    @Published var isLoading = false
    var searchText: String = ""
    
    func searchTextDidChange() {
        isLoading = true
        API.User.searchUser(text: searchText) { (users) in
            self.isLoading = false
            self.users = users
        }
        // confirmed that users has data now at this point
    }
}
看法
struct UsersView: View {
    @ObservedObject var usersViewModel = UsersViewModel()
    
    var body: some View {
        VStack() {
            SearchBarView(text: $usersViewModel.searchText, onSearchButtonChanged: usersViewModel.searchTextDidChange)
            
            // Not getting called after usersViewModel.users gets data
            if (usersViewModel.users.count > 0) {
                Text(usersViewModel.users[0].username)
            }
        }
    }
}

最佳答案

您可能会使用不同的 UsersViewModel 对象:

@ObservedObject var usersViewModel = UsersViewModel()
由于 UsersView 是一个结构体,因此每次实例化 View 时都会创建一个新模型(这可能经常发生,而不仅仅是在 View 出现时)。在 iOS 14 中有 @StateObject将 State(在 View 实例化之间保留信息)与 ObservedObject 结合,但在 iOS 13 中,如果 ObservedObject 不是共享实例,我建议传入它。

关于SwiftUI ObservableObject 在发布值时不会更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63427634/

相关文章:

swiftui 有 2 个或 3 个操作表的一个 View ?

ios - 在 SwiftUI/Swift/Objective-C/Xamarin 中将底部边框线添加到 UI TextField View

java - 没有从数据库的 LiveData 观察者获取数据

mvvm - SwiftUI - @Binding 到访问 ObservableObject 属性内的值的计算属性会重复变量吗?

swift - 检查多个@Published 值

ios - 如何在 SwiftUI 和 iOS 14 中更改单元格背景颜色?

当模态显示键盘时,SwiftUI 会挤压父 View

javascript - 我想使用 rxjs subject 来检测多个组件中的值变化。但它只显示改变它的组件的变化

javascript - Angular 4 - 循环遍历 Observables 并在新数组中提取值

SwiftUI 组合 : Nested Observed-Objects