swift常用扩展(UserDefaults)

604 阅读1分钟

使 UserDefaults更加方便,常用信息能实现代码联想补全。 使用:

UserDefaults.LoginInfo.set(value: "token", forKey: .token)
UserDefaults.LoginInfo.string(forKey: .token)

如果有还有其他信息,只需要添加新的结构体并遵循UserDefaultsSettable协议,添加enum defaultKeys: String,如下:

    // 新信息
    struct <#新结构体名称#>: UserDefaultsSettable {

        enum defaultKeys: String {
            case <#key#>
        }

    }

代码

import Foundation

// MARK: - UserDefaults常用封装
protocol UserDefaultsSettable {
    associatedtype defaultKeys: RawRepresentable
}


extension UserDefaultsSettable where defaultKeys.RawValue==String {
    
    static func set(value: String?, forKey key: defaultKeys) {
        let aKey = key.rawValue
        UserDefaults.standard.set(value, forKey: aKey)
    }
    static func string(forKey key: defaultKeys) -> String? {
        let aKey = key.rawValue
        return UserDefaults.standard.string(forKey: aKey)
    }
}


extension UserDefaultsSettable where defaultKeys.RawValue==String {
    
    static func set(value: Any?, forKey key: defaultKeys) {
        let aKey = key.rawValue
        UserDefaults.standard.set(value, forKey: aKey)
    }
    static func object(forKey key: defaultKeys) -> Any? {
        let aKey = key.rawValue
        return UserDefaults.standard.dictionary(forKey: aKey)
    }
}



/**
 使用:
 
 UserDefaults.LoginInfo.set(value: "token", forKey: .token)
 UserDefaults.LoginInfo.string(forKey: .token)
 
 */
extension UserDefaults {
    
    // 登录信息
    struct LoginInfo: UserDefaultsSettable {
        enum defaultKeys: String {
            case token
            case userId
            case userName
            case loginStatus
            
        }
    }
    
    // 账户信息
    struct AccountInfo: UserDefaultsSettable {
        enum defaultKeys: String {
            case history
            case user
        }
    }
    
    // APP信息
    struct APPInfo: UserDefaultsSettable {
        enum defaultKeys: String {
            case version
            case isFirstLogin
        }
    }
    
}

demo参考: github