我在 SwiftUI 中使用 UserDefaults 和合并。
我的 UserDefault.swift 文件:
import SwiftUI
struct UserDefault<T> {
let key: String
let defaultValue:T
var wrappedValue:T {
get {
return UserDefaults.standard.object(forKey: key) as? T ?? defaultValue
} set {
UserDefaults.standard.set(newValue, forKey: key)
}
}
}
在以下类中使用此结构时,如下所示:
DataStore.swift 文件:
import SwiftUI
import Combine
final class DataStore : ObservableObject { //(1)
let didChange = PassthroughSubject<DataStore, Never>()
@UserDefault(key: "firstLaunch", defaultValue: true) //(2)
var firstLaunch:Bool{
didSet{
didChange.send(self)
}
}
}
在上面的代码中,我遇到了 2 个错误:
(1):类“DataStore”没有初始值设定项
(2):通用结构“UserDefault”不能用作属性
我认为 swift 5.1 中有更改或折旧,但我找不到它。
最佳答案
使用这样的东西:
@propertyWrapper
struct UserDefault<T> {
let key: String
let defaultValue: T
init(key: String, defaultValue: T) {
self.key = key
self.defaultValue = defaultValue
}
var wrappedValue: T {
get {
return UserDefaults.standard.object(forKey: key) as? T ?? defaultValue
}
set {
UserDefaults.standard.set(newValue, forKey: key)
}
}
}
https://github.com/apple/swift-evolution/blob/master/proposals/0258-property-wrappers.md
关于swift - 在 swift 5.1 类中使用属性包装器时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58881050/