【问题标题】:How to save a UUID in SwiftUI using @AppStorage如何使用@AppStorage 在 SwiftUI 中保存 UUID
【发布时间】:2022-08-23 21:45:36
【问题描述】:

使用时

@AppStorage(\"navigationWaypointID\") var navigationWaypointID: UUID?

我得到一个No exact matches in call to initializer

我可以通过使用字符串和使用字符串作为事实来源的自定义属性来解决问题,但这并不理想。例如。,

@AppStorage(\"selectedWaypointID\") var selectedWaypointIDString: String?
var selectedWaypointID: UUID? {
    get { UUID(uuidString: selectedWaypointIDString ?? \"\") }
    set { selectedWaypointIDString = newValue?.uuidString }
}
  • 您的解决方法是我也会给出的答案。有什么不好的?
  • @ChrisR 解决方法意味着应用程序在每次访问时浪费循环转换到/从字符串表示,而不是仅在需要保存结果时。

标签: swiftui


【解决方案1】:

我们可以确认UUIDRawRepresentable 协议,因此它适合AppStorage init 之一。

这是一种可能的方法。使用 Xcode 13.2 / iOS 15.2 测试

extension UUID: RawRepresentable {
    public var rawValue: String {
        self.uuidString
    }

    public typealias RawValue = String

    public init?(rawValue: RawValue) {
        self.init(uuidString: rawValue)
    }
}

然后你的原始(下面)代码就可以“按原样”工作

@AppStorage("navigationWaypointID") var navigationWaypointID: UUID?

【讨论】:

  • 完美的。非常感谢@Asperi。
猜你喜欢
  • 1970-01-01
  • 2021-11-24
  • 2020-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多