swift - SwiftUI 小部件中的 UIKit UserDefaults

标签 swift swiftui widget uikit ios14

希望这是一个简单的问题,但我想知道如何从 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:) .

关于swift - SwiftUI 小部件中的 UIKit UserDefaults,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64079220/

相关文章:

swift - 计时器 onReceive 在 NavigationView 中不起作用

javascript - 获取单击的下拉元素的文本内容的标准方法不起作用

ios - SwiftUI/MapKit 注解选择和导航

ios - 如何在不选择表格 View 的单元格的情况下将搜索栏作为第一响应者辞职?

swift - 如何在子类中使用新的 collectionView?

ios - 如何在基本 VC 中按下按钮时更改容器 View 内容器的框架?

ios - SwiftUI 如何给 Slider 一个最小值和最大值并在 Text 中显示它的值?

android - 为什么小部件在重启后不起作用?

javascript - 小部件上的 dojo 查询

arrays - 检查数组的所有元素是否在 Swift 中具有相同的值