首页 > 解决方案 > 如何在 SwiftUI 中使用 UserData 可观察对象?

问题描述

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

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

所以,我创建了UserData.swift一个utilisateurwhere 和一个 boolean var :

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值被删除并且没有保存在内存中。

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

标签: swiftxcodeswiftui

解决方案


UserData没有保存在磁盘上。它保留在内存中,但是当您关闭应用程序时,它就消失了。一种方法是使用以下方法保存数据UserDefaults

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

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

您可以在这里找到更多信息:

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

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

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

推荐阅读