⚡ 编程实验室🏗️ HTML🎨 CSS⚡ JavaScript🐍 Python🗄️ SQL☕ Java⚛️ React💚 Vue🟢 Node.js⚙️ C语言🐘 PHP🐹 Go🔷 TypeScript🐬 MySQL🔧 C++🎯 C#🦀 Rust🅱️ Bootstrap💡 jQuery🎸 Django🍃 MongoDB👗 Sass🎪 Kotlin📊 R语言📋 XML📊 Excel🐘 PostgreSQL🐳 Docker🅰️ Angular🎮 游戏🏠 网站首页

属性包装器作为自定义属性:从持久化到约束验证

超越 @State 和 @Binding,实现自己的属性包装器将持久化、验证与通知逻辑嵌入存储访问中,且兼容 Codable。 · 难度:入门 · +10XP

自定义属性包装器

属性包装器在访问属性值时插入自定义逻辑。我们构建一个 @Persisted(key:) 包装器,将值自动存入 UserDefaults;一个 @Validated 包装器,在写值前检查闭包条件;两者都可以组合使用。

@propertyWrapper
struct Persisted<T> {
    private let key: String
    private let defaultValue: T
    var wrappedValue: T {
        get { UserDefaults.standard.object(forKey: key) as? T ?? defaultValue }
        set { UserDefaults.standard.set(newValue, forKey: key) }
    }
    init(wrappedValue: T, key: String) {
        self.key = key
        self.defaultValue = wrappedValue
    }
}
class Settings {
    @Persisted(key: "volume") var volume: Double = 0.5
}
Ctrl+Enter
🚀 升级VIP
解锁全部课程+AI助手

🏆 学习排行

加载中...

📊 统计

📖 177 篇
0 完成
🔥 0