如何使 AppStorage 变量仅在 iOS 14 上运行时可用?

Posted

技术标签:

【中文标题】如何使 AppStorage 变量仅在 iOS 14 上运行时可用?【英文标题】:How to make AppStorage Variable only available when running on iOS 14? 【发布时间】:2020-08-19 19:41:30 【问题描述】:

我快疯了,我想使用仅在 ios 14 中可用的 AppStorage(在小部件中使用它)!但我得到一个错误:

本地属性尚不支持属性包装器

我想将小部件集成到我的 UIKit 应用程序中,将来会提供属性包装器吗?

现在我讨厌的解决方法是让整个 ViewController @available(iOS 14.0, *),但你猜对了,它现在只能在 iOS 14 上运行!

@AppStorage("incomeTotal", store: UserDefaults(suiteName: "group.de.davidkoenig.SimpleMoney"))
var incomeTotal: String = "0.0"

您可以在上面看到我的 AppStorage 代码。

也许你能帮帮我!?

【问题讨论】:

如果您的项目设置支持 iOS 低于 14,那么您将不得不使用 App Groups 来管理它或在您的项目中放置大量 @available。 我使用的是应用组,但是如何在 UIKit 和 swift 文件中使用 AppStorage,因为小部件需要 AppStorage。也许你知道如何在 UIKit 中设置应用程序组(用户默认值)? 【参考方案1】:

我找到了一种方法来保护 UIKit 中的对象:

UserDefaults(suiteName: "group.de.davidkoenig.SimpleMoney")!.set(String(format: "%.2f", sumBalance), forKey: "balanceTotal")

这行得通,在我的 SwiftUI 文件中,我使用了问题中的代码!

【讨论】:

我建议您使用枚举而不是字符串作为键

以上是关于如何使 AppStorage 变量仅在 iOS 14 上运行时可用?的主要内容,如果未能解决你的问题,请参考以下文章

使用 @AppStorage 进行设置的 SwiftUI 最佳实践:如何在加载 @AppStorage 之前读取 UserDefaults?

如何在 ViewModel 中使用带有自定义类型和 @Published 的 @AppStorage?

更新单独结构中的@AppStorage 后如何更新 SwiftUI 视图

SwiftUI:绑定到@AppStorage

仅在完成操作IOS Swift 3后才使用户访问视图[关闭]

如何让@AppStorage 在 MVVM / SwiftUI 框架中工作?