日常阅读

Swift开发:UserDefaults本地存储优化使用方案

2023-07-02  本文已影响0人  ArslanRobot

通常的UserDefaults本地存储api使用方式像这样比价繁琐

如下:

//写入
let defaults = UserDefaults.standard
defaults.set(20, forKey: "Age")
defaults.set(CGFloat.pi, "PI")
//读取
defaults.integer(forKey: "Age")

改为如下优化使用方式:
其中#function是Swift内置编译符号,指代包含这个符号的方法或属性名,这里等同于字符串startup

import Foundation

extension UserDefaults {
    // 通过下标使用枚举
    subscript<T: RawRepresentable>(key: String) -> T? {
        get {
            if let rawValue = value(forKey: key) as? T.RawValue {
                return T(rawValue: rawValue)
            }
            return nil
        }
        set { set(newValue?.rawValue, forKey: key) }
    }
    
    subscript<T>(key: String) -> T? {
        get { return value(forKey: key) as? T }
        set { set(newValue, forKey: key) }
    }
}

struct Preference {
    /** 开机启动 */
    static var startup: Bool {
        get { return UserDefaults.standard[#function] ?? false }
        set { UserDefaults.standard[#function] = newValue }
    }
}

使用方式如下,代码干净多了

写入
Preference.startup = true
读取
print(Preference.startup)

Swift内置编译符号说明:

file 包含这个符号的文件路径

line 符号出现的行号

column 符号出现处的列

function 包含这个符号的方法或属性名

上一篇 下一篇

猜你喜欢

热点阅读