首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ObservableObject不更新视图

ObservableObject不更新视图
EN

Stack Overflow用户
提问于 2020-07-25 13:02:47
回答 1查看 67关注 0票数 1

我对SwiftUI非常陌生(我也有一段时间没碰过Swift了),所以请容忍我:

我有这样的看法:

代码语言:javascript
复制
import SwiftUI
import Combine
var settings = UserSettings()


struct Promotion: View {
    @State var isModal: Bool = true
    @State private var selectedNamespace = 2
    @State private var namespaces = settings.namespaces
    
    var body: some View {
        VStack {
            Picker(selection: $selectedNamespace, label: Text("Namespaces")) {
                ForEach(0 ..< namespaces.count) {
                    Text(settings.namespaces[$0])
                    
                }
            }
        }.sheet(isPresented: $isModal, content: {
            Login()
        })
    }
}

我在这里所做的是,在启动、登录时调用登录视图,当成功时,我将

var设置

在LoginView中也是如此

代码语言:javascript
复制
settings.namespaces = ["just", "some", "values"]

我的UserSettings类被定义为

代码语言:javascript
复制
class UserSettings: ObservableObject {
    @Published var namespaces = [String]()
}

根据我最近获得的知识,我的Login视图正在设置我的UserSettings类的名称空间属性。因为这个类是一个ObservableObject,所以使用该类的任何视图都应该更新以反映更改。

然而,我的选择仍然是空的。

这是因为根本的误解,还是我只是缺了一个逗号之类的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-25 13:13:25

您必须将ObservableObject与视图中的ObservedObject配对,以便通知视图更改和刷新。

尝试以下几点

代码语言:javascript
复制
struct Promotion: View {
    @ObservedObject var settings = UserSettings()   // << move here

    @State var isModal: Bool = true
    @State private var selectedNamespace = 2
//    @State private var namespaces = settings.namespaces    // << not needed
    
    var body: some View {
        VStack {
            Picker(selection: $selectedNamespace, label: Text("Namespaces")) {
                ForEach(namespaces.indices, id: \.self) {
                    Text(settings.namespaces[$0])
                    
                }
            }
        }.sheet(isPresented: $isModal, content: {
            Login(settings: self.settings)          // inject settings
        })
    }
}


struct Login: View {
    @ObservedObject var settings: UserSettings   // << declare only !!

    // ... other code
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63088646

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档