为 @CloudStorage 添加了类 @Published 的能力

2022-07-28 13:12:45 浏览数 (1)

我重新修改了 CloudStorage 的代码,现在可以同 AppStorage 完全一样将 UserDefaults 和 NSUbiquitousKeyValueStore 汇总到一起,在 SwiftUI 中统一管理了。

下周我们将聊聊它的实现原理 —— 【如何为属性包装器添加类 Published 的能力】

代码语言:javascript复制
class Settings:ObservableObject {
       @AppStorage("name") var name = "fat"
       @AppStorage("age") var age = 5
       @CloudStorage("readyForAction") var readyForAction = false
       @CloudStorage("speed") var speed: Double = 0
}

struct DemoView: View {
    @StateObject var settings = Settings()
    var body: some View {
        Form {
            TextField("Name",text: $settings.name)
            TextField("Age", value: $settings.age, format: .number)
            Toggle("Ready", isOn: $settings.readyForAction)
                .toggleStyle(.switch)
            TextField("Speed",value: $settings.speed,format: .number)
        }
        .frame(width: 400, height: 400)
    }
}

CloudStorage 原作者尚未合并修改后的代码,目前可下载我的 Fork 版本[1]

关于 NSUbiquitousKeyValueStore 请参阅 在 SwiftUI 下使用 NSUbiquitousKeyValueStore 同步数据[2]

关于 AppStorage 可以阅读 @AppStorage 研究[3]

因为微信公众号中的文章只能修改10个字符,因此只有博客上的文章 www.fatbobman.com 才会保持更新,望见谅。

参考资料

[1] Fork 版本: https://github.com/fatbobman/CloudStorage

[2] 在 SwiftUI 下使用 NSUbiquitousKeyValueStore 同步数据: https://www.fatbobman.com/posts/nsubiquitousKeyvalueStore/

[3] @AppStorage 研究: https://fatbobman.com/posts/appstorage/

0 人点赞