UserDefaults
是 iOS 中非常常用的一种数据持久化方式,在实际开始中我们一般不会直接使用系统提供的 API 去操作UserDefaults
,而是会创建一些扩张,利用扩展的方法来使用UserDefaults
。利用 Swift 语言的一些特性,我们可以写出非常优化的UserDefaults
扩展。
利用 Swift 的泛型以及subscript
,可以实现一个不需要关心存储数据类型的UserDefaults
扩展,代码如下:
1 | extension UserDefaults { |
然后使用另外一个扩展定义 Key
1 | extension UserDefaults.Key { |
这样,在使用时就不需要关心类型了
1 | UserDefaults.standard[.likeCount] = 12 |
Swift5 中新增了Property Wrappers
特性,利用Property Wrappers
也可以使得UserDefaults
的使用变得非常优雅:
1 | struct UserDefault<T> { |
定义UserDefaults
的 Key
1 | struct UserDefaultsConfig { |
在使用时就可以直接赋值
1 | UserDefaultsConfig.likeCount = 13 |
上面两种方式唯一不同的点是,第一种方式每次都可以指定不同的defaultValue
,而第二种方式只能在定义属性时指定一次defaultValue
,使用时不能动态修改defaultValue
。
个人建议两种方式取其一即可,如果不需要动态修改defaultValue
,个人建议使用第二种方式,应为更加简洁明了。
参考资料:
Property wrappers to remove boilerplate code in Swift
Property Wrappers
The power of subscripts in Swift