我应该如何获取和设置 UserDefaults 的值?
How should I get and set a value of UserDefaults?
我目前正在使用 SwiftUI.
开发应用程序
我想在此应用程序中使用 UserDefaults 值。
所以我在下面做了一个代码。
但在这种情况下,当我重新启动应用程序时(下面过程中的第 4 个过程),我无法从 UserDefaults 中获取值...
构建并运行这个项目。
请关闭主页按钮,应用程序进入后台。
Double-tap 主页按钮并删除应用程序屏幕。
按应用程序图标并重新启动应用程序。然后我想从 UserDefaults 中获取值。
要解决此问题,我应该如何在 UserDefaults 中设置和获取值?
代码如下:
import SwiftUI
struct ContentView: View {
@State var text = "initialText"
var body: some View {
VStack {
Text(text)
TextField( "", text: $text)
}.onAppear(){
if let text = UserDefaults.standard.object(forKey: "text" ){
self.text = text as! String
}
}
.onDisappear(){
UserDefaults.standard.set(self.text, forKey: "text")
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
添加
当我在第一个答案后添加此 class 时,该代码有几个这样的错误,这是正常的吗?
Xcode: 版本 11.7
Swift: Swift 5
像这样在 class 中设置您的值:Bool、String(参见示例)、Int 等...
#if os(iOS)
import UIKit
#else
import AppKit
#endif
import Combine
@propertyWrapper struct UserDefault<T> {
let key: String
let defaultValue: T
init(_ key: String, defaultValue: T) {
self.key = key
self.defaultValue = defaultValue
}
var wrappedValue: T {
get {
return UserDefaults.standard.object(forKey: key) as? T ?? defaultValue
}
set {
UserDefaults.standard.set(newValue, forKey: key)
}
}
}
final class UserSettings: ObservableObject {
let objectWillChange = PassthroughSubject<Void, Never>()
@UserDefault("myText", defaultValue: "initialText")
var myText: String {
willSet { objectWillChange.send() }
}
}
要阅读的内容:
let settings = UserSettings()
let count = settings.countSentence // default countsentence 1
要更新的内容:
let settings = UserSettings()
settings.countSentence = 3 // default countsentence 3
根据您的代码:
struct ContentView: View {
let UserDef = UserSettings()
@State var text = ""
var body: some View {
VStack {
Text(UserDef.myText)
TextField("placeholder", text: $text, onCommit: { self.UserDef.myText = self.text})
}.onAppear() {
self.text = self.UserDef.myText
}
}
}
我目前正在使用 SwiftUI.
开发应用程序我想在此应用程序中使用 UserDefaults 值。 所以我在下面做了一个代码。
但在这种情况下,当我重新启动应用程序时(下面过程中的第 4 个过程),我无法从 UserDefaults 中获取值...
构建并运行这个项目。
请关闭主页按钮,应用程序进入后台。
Double-tap 主页按钮并删除应用程序屏幕。
按应用程序图标并重新启动应用程序。然后我想从 UserDefaults 中获取值。
要解决此问题,我应该如何在 UserDefaults 中设置和获取值?
代码如下:
import SwiftUI
struct ContentView: View {
@State var text = "initialText"
var body: some View {
VStack {
Text(text)
TextField( "", text: $text)
}.onAppear(){
if let text = UserDefaults.standard.object(forKey: "text" ){
self.text = text as! String
}
}
.onDisappear(){
UserDefaults.standard.set(self.text, forKey: "text")
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
添加
当我在第一个答案后添加此 class 时,该代码有几个这样的错误,这是正常的吗?
Xcode: 版本 11.7
Swift: Swift 5
像这样在 class 中设置您的值:Bool、String(参见示例)、Int 等...
#if os(iOS)
import UIKit
#else
import AppKit
#endif
import Combine
@propertyWrapper struct UserDefault<T> {
let key: String
let defaultValue: T
init(_ key: String, defaultValue: T) {
self.key = key
self.defaultValue = defaultValue
}
var wrappedValue: T {
get {
return UserDefaults.standard.object(forKey: key) as? T ?? defaultValue
}
set {
UserDefaults.standard.set(newValue, forKey: key)
}
}
}
final class UserSettings: ObservableObject {
let objectWillChange = PassthroughSubject<Void, Never>()
@UserDefault("myText", defaultValue: "initialText")
var myText: String {
willSet { objectWillChange.send() }
}
}
要阅读的内容:
let settings = UserSettings()
let count = settings.countSentence // default countsentence 1
要更新的内容:
let settings = UserSettings()
settings.countSentence = 3 // default countsentence 3
根据您的代码:
struct ContentView: View {
let UserDef = UserSettings()
@State var text = ""
var body: some View {
VStack {
Text(UserDef.myText)
TextField("placeholder", text: $text, onCommit: { self.UserDef.myText = self.text})
}.onAppear() {
self.text = self.UserDef.myText
}
}
}