SwiftUI 小部件中的 UIKit UserDefaults

UIKit UserDefaults in SwiftUI widget

希望这是一个简单的问题,但我想知道如何从 SwiftUI 小部件访问保存在我的 UIKit 应用程序中的 UserDefaults 数据?我需要在小部件中显示其中一些数据。

谢谢!

您需要将 UserDefaults(suiteName:) 而不是 UserDefaults.standard 与 AppGroup 一起使用。 UserDefaults.standard 只能在它所在的应用程序中访问,它不适用于您制作的任何扩展程序或其他应用程序。这就是您必须使用 AppGroup 的原因。

创建 AppGroup 后(您可以在“签名和功能”部分执行此操作),您应该有一个 suiteName,类似于:

group.com.my.app.identifier

然后在应用程序的 UIKit 部分,您可以按以下方式设置 AppGroup 的 UserDefaults 中的值:

if let userDefaults = UserDefaults(suiteName: "group.com.my.app.identifier") {
    userDefaults.setValue("value to save", forKey: "Key")
}

你可以使用:

读回它们
if let userDefaults = UserDefaults(suiteName: "group.com.my.app.identifier") {
    let value = userDefaults.string(forKey: "Key")
}

由于小部件将在 SwiftUI 中编写,您可以使用 属性 包装器 @AppStorage 来访问值:

@AppStorage("Key", store: UserDefaults(suiteName: "group.com.my.app.identifier"))
var value: String = ""

如果您已经存储了希望在 UserDefaults.standard 中使用的值,则需要将它们复制到 UserDefaults(suitName:)