propertyWrapper示例
import SwiftUI
@propertyWrapper
struct UserDefaultsWrapper<T> {
var key:String
var defaultValue: T
init(_ key: String, defaultValue: T) {
self.key = key
self.defaultValue = defaultValue
}
var wrappedValue:T {
get {
return UserDefaults.standard.value(forKey: key) as? T ?? defaultValue
}
set {
UserDefaults.standard.set(newValue, forKey: key)
}
}
}
struct PropertyWrapperView: View {
@UserDefaultsWrapper("hadShowUserGuide", defaultValue: false)
static var hadShowUserGuide: Bool
@State private var showText = PropertyWrapperView.hadShowUserGuide ? "已经展示过" : "没有展示过"
var body: some View {
Button(action: {
if (!PropertyWrapperView.hadShowUserGuide) {
PropertyWrapperView.hadShowUserGuide = true
self.showText = "已经展示过"
}
}) {
Text(self.showText)
}
}
}
struct PropertyWrapperView_Previews: PreviewProvider {
static var previews: some View {
PropertyWrapperView()
}
}