如果存在用户默认值,则更新@Published var swift
Updating @Published var if a userdefault value is present swift
我正在尝试检查我的应用程序,看看用户默认值中是否存在某个值,如果存在,它们将被应用到应用程序中。如果它不存在,他们需要在那里输入密码,然后进入应用程序。
知道如何检查用户默认值中是否存在值,然后将 isValidated 更改为 true
//主要
import SwiftUI
@main
struct ProjectHogtieApp: App {
@StateObject var authentication = Authentication()
var body: some Scene {
WindowGroup {
if authentication.isValidated {
ContentView()
.environmentObject(authentication)
} else {
LoginView()
.environmentObject(authentication)
}
}
}
}
// authentiction.swift
class Authentication: ObservableObject {
@Published var isValidated = false
// this code is not working.
var getIsValidated: Void {
let deviceId = UserDefaults.standard.string(forKey: "deviceId")
if (deviceId != nil) {
self.isValidated = true
} else {
self.isValidated = false
}
}
当用户输入 pin 时,我将值保存在用户默认值中,如下所示
let defaults = UserDefaults.standard
defaults.set(deviceId, forKey: "deviceId")
试试这个,在应用程序启动时检查您的 UserDefaults
(即创建 Authentication
时):
class Authentication: ObservableObject {
@Published var isValidated = false
// --- here
init() {
getIsValidated
}
//....
请注意,对于身份验证等重要事项...您应该使用 Keychain
来安全地保存数据,而不是 UserDefaults
您可以继续沿着您要走的路前进。但是,SwiftUI
中存在一个 属性 包装器,称为 AppStorage
。这本质上是一个方便的包装器,用于在 UserDefaults
中获取和设置值。在这种情况下,您可能会像这样使用它...
import SwiftUI
@main
struct ProjectHogtieApp: App {
@AppStorage("isAuthenticated") private var isAuthenticated: Bool = false
var body: some Scene {
WindowGroup {
if isAuthenticated {
ContentView()
} else {
LoginView()
}
}
}
}
属性包装器采用的参数是您的键,您提供的值是默认值,但会被UserDefaults
中的任何现有值覆盖。
我正在尝试检查我的应用程序,看看用户默认值中是否存在某个值,如果存在,它们将被应用到应用程序中。如果它不存在,他们需要在那里输入密码,然后进入应用程序。
知道如何检查用户默认值中是否存在值,然后将 isValidated 更改为 true
//主要
import SwiftUI
@main
struct ProjectHogtieApp: App {
@StateObject var authentication = Authentication()
var body: some Scene {
WindowGroup {
if authentication.isValidated {
ContentView()
.environmentObject(authentication)
} else {
LoginView()
.environmentObject(authentication)
}
}
}
}
// authentiction.swift
class Authentication: ObservableObject {
@Published var isValidated = false
// this code is not working.
var getIsValidated: Void {
let deviceId = UserDefaults.standard.string(forKey: "deviceId")
if (deviceId != nil) {
self.isValidated = true
} else {
self.isValidated = false
}
}
当用户输入 pin 时,我将值保存在用户默认值中,如下所示
let defaults = UserDefaults.standard
defaults.set(deviceId, forKey: "deviceId")
试试这个,在应用程序启动时检查您的 UserDefaults
(即创建 Authentication
时):
class Authentication: ObservableObject {
@Published var isValidated = false
// --- here
init() {
getIsValidated
}
//....
请注意,对于身份验证等重要事项...您应该使用 Keychain
来安全地保存数据,而不是 UserDefaults
您可以继续沿着您要走的路前进。但是,SwiftUI
中存在一个 属性 包装器,称为 AppStorage
。这本质上是一个方便的包装器,用于在 UserDefaults
中获取和设置值。在这种情况下,您可能会像这样使用它...
import SwiftUI
@main
struct ProjectHogtieApp: App {
@AppStorage("isAuthenticated") private var isAuthenticated: Bool = false
var body: some Scene {
WindowGroup {
if isAuthenticated {
ContentView()
} else {
LoginView()
}
}
}
}
属性包装器采用的参数是您的键,您提供的值是默认值,但会被UserDefaults
中的任何现有值覆盖。