【问题标题】:Recommended way to store Configuration in a SwiftUI MacOS App在 SwiftUI MacOS 应用程序中存储配置的推荐方式
【发布时间】:2021-04-13 14:53:37
【问题描述】:

我必须在 SwiftUI MacOS 应用程序中保留配置。
Config 大小约为 4KB,是一个包含其他结构和数组的结构。

你会推荐什么?

  1. 在用户的主目录中存储一个隐藏的 (.appname) json 文件。
    1a) 将 json 文件存储在另一个位置?推荐其他哪个位置?
  2. 使用新的@AppStorage 机制和一些增强功能,如:SwiftUI: What is @AppStorage property wrapper 中所述,以便能够存储结构和数组。 User.defaults 是 4K 吗?

或者有其他更好的方法吗?

【问题讨论】:

  • 这是基于意见的 - 尽可能方便。

标签: swift macos swiftui


【解决方案1】:

使用@AppStorage 与使用用户默认值相同,在读/写和通过场景的级联更改方面更方便。根据 Apple 的文档,tvOS 只有 1MB 的限制。 4K 应该适合任何设备上的配置信息。

https://developer.apple.com/documentation/foundation/userdefaults/1617187-sizelimitexceedednotification

【讨论】:

    【解决方案2】:

    Asperi 说得对,这只是一个简单的意见,由您决定。

    以下是我注意到的关于 macOS 中的持久性的一些事情。

    UserDefaults@AppStorage 在后台使用)允许您存储简单类型和 Data(理论上可以表示任何类型)。 UserDefaults 会自动写入位于以下位置的属性列表中:

    ~/Library/Preferences/<yourbundleid>.plist

    如果您的应用被沙盒化,它将位于:

    ~/Library/Containers/<Your Container>/Library/Preferences/<yourbundleid>.plist

    如果您使用自定义方法保存配置/首选项,大多数开发人员会将此类数据存储在内部: ~/Library/Application Support/Your App/

    我鼓励您不要将配置存储在他们的主目录中,除非出于某种特殊原因您绝对需要它。它会使您的应用更难卸载,并且会使它们的主文件夹变得混乱!

    UserDefaults 与自定义配置?

    再一次,只是我的意见,但这是我通常遵循的规则:

    哪个更容易?

    我通常发现自己使用 UserDefaults 来获得上下文偏好,例如对话框上典型的“不要再打扰我”复选框。 我也经常使用它来记住状态(@AppStorage 变得非常棒)。附带说明一下,UserDefaults 会自动读取首选项并将其写入磁盘,这反过来意味着更少的代码。

    当首选项在视图/vc 代码之外进行管理时,或者当我的配置结构相当复杂时,我确实发现自己偶尔会使用自定义配置。如果我必须完成将 structs 反序列化/重新序列化为 Data 以存储在 UserDefaults 中的工作,我不妨将它们存储并自己管理。

    尺寸问题

    我一直听说在 UserDefaults 中存储大量首选项是“不好的”。虽然 UserDefaults 肯定能够存储您在问题中提到的 4KB,但在某些情况下您需要使用替代方案。我发现以下SO thread 对这个主题很有启发。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-06
      • 1970-01-01
      • 2021-03-29
      • 2011-10-29
      • 1970-01-01
      • 2014-09-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多