【问题标题】:How to use UserData Observable Object in SwiftUI?如何在 SwiftUI 中使用 UserData 可观察对象?
【发布时间】:2020-09-19 16:49:20
【问题描述】:

在 Xcode SwiftUI 项目中,我有一个 TextField,用户在其中写入用户名。

我希望用户关闭应用程序时将用户名保留在内存中。

所以,我创建了一个UserData.swift,其中有utilisateur 和一个布尔变量:

final class UserData: ObservableObject  {
    @Published var utilisateur = ""
    @Published var connected = false
}

在我的ContentView 上,我写道:

@EnvironmentObject var userData: UserData

在代码中,我为每种情况编写了这三种可能性之一。

self.userData.utilisateur
userData.utilisateur
userData.$utilisateur

此外,在SceneDelegate.swift,我写了这个:

window.rootViewController = UIHostingController(rootView: contentView.environmentObject(UserData()))

问题是当我关闭应用程序时,utilisateur 值被删除并且没有保存在内存中。

有人知道我的错误在哪里,我应该怎么做才能纠正它?

【问题讨论】:

  • 将其存储在 UserDefaults 中。

标签: swift xcode swiftui


【解决方案1】:

您的UserData 未保存在磁盘上。它保留在内存中,但是当您关闭应用程序时,它就消失了。一种方法是使用UserDefaults 持久化您的数据:

//save
UserDefaults.standard.set(connected, forKey: "connected")

//read
let connected = UserDefaults.standard.bool(forKey: "connected")

您可以在此处找到更多信息:

要将其与现有代码集成,您可以在 @Published 属性上使用 didSet

final class UserData: ObservableObject  {
    @Published var connected: Bool {
        didSet {
            UserDefaults.standard.set(connected, forKey: "connected")
        }
    }

    init() {
        _connected = .init(initialValue: UserDefaults.standard.bool(forKey: "connected"))
    }
}

【讨论】:

  • 谢谢,您的代码显示connected 的默认值是false?还是我必须将其设置在某个地方?另外,我在我的 UserData.swift 中执行此操作,在我的 ContentView 中我没有什么可更改的?
  • 一开始你的UserDefaults 是空的。因此,当您搜索 connected 键时,它会返回 false。而且您无需更改您的ContentView。整个想法是让您的视图与存储模型的方式分开。
猜你喜欢
  • 2023-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多