如何在 swiftUI 中使用 UserData Observable 对象?

问题描述 投票:0回答:1

在Xcode SwiftUI项目中,我有一个TextField,用户在里面写了用户名。我希望当用户关闭应用程序时,该用户名将被保存在内存中。

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

import SwiftUI
import Combine

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 值被删除,而不是保留在内存中。

有谁知道我的错误在哪里,我应该怎么改?

xcode swiftui user-data maccatalyst
1个回答
1
投票

你的 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"))
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.