我应该如何获取和设置 UserDefaults 的值?
Posted
技术标签:
【中文标题】我应该如何获取和设置 UserDefaults 的值?【英文标题】:How should I get and set a value of UserDefaults? 【发布时间】:2020-09-08 11:08:25 【问题描述】:我目前正在使用 SwiftUI 开发应用程序。
我想在此应用中使用 UserDefaults 值。 所以我在下面做了一个代码。
但在这种情况下,当我重新启动应用程序时(以下进程中的第 4 个进程),我无法从 UserDefaults 中获取值...
构建并运行此项目。
按下主页按钮,应用程序进入后台。
双击主页按钮并移除应用屏幕。
按下应用程序图标并重新启动应用程序。然后我想从 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()
添加
当我在第一个答案之后添加这个类时,该代码有几个这样的错误,这是常见的吗?
Xcode:版本 11.7
斯威夫特:斯威夫特 5
【问题讨论】:
检查一下,***.com/questions/56822195/… 你的 ios 版本目标是什么?也许值得一提的是,如果您准备等待 Xcode 12 和 iOS 14 的发布,您可以使用 SwiftUI @AppStorage 属性包装器 - 非常易于使用并且只需要很少的代码。 @andrewbuilder,感谢您的评论,本项目的目标是 ios 13.7 【参考方案1】:在这样的类中设置您的值: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
【讨论】:
感谢您的帮助,当我添加UserSettings
类时,代码有几个错误,就像我附上的照片一样,这是正常的吗?
感谢您的大力支持!现在效果很好。以上是关于我应该如何获取和设置 UserDefaults 的值?的主要内容,如果未能解决你的问题,请参考以下文章
设置 nil UserDefaults 时出现 NSInvalidArgumentException