UserDefaults+FFExtension(Swift版)

之前使用UserDefaults代码是这样的

private let kString1   = "kString1"
private let kString2   = "kString2"
UserDefaults.standard.set("string1", forKey: kString1) 
UserDefaults.standard.set("string2", forKey: kString2) 
UserDefaults.standard.string(forKey: kString1)
UserDefaults.standard.string(forKey: kString1)

缺点:如果存储的变量或对象很多,key写起来很繁琐。

在FFExtension中,我用#function作为key的默认名称,这样就省去了一堆繁琐的代码。并且给其配置默认值,而且当值设置为nil时,UserDeufaults将去除这对(key: value),代码如下:

    public var FFDUserDefaults = UserDefaults.standard
    // MARK: Set Get string for key
    func ffd_setString(_ newValue: String?, key: String = #function) {
        guard let value = newValue else { FFDUserDefaults.removeObject(forKey:    forKey); return  } 
        FFDUserDefaults.set(value, forKey: forKey)
    }

    func ffd_stringForKey(_ key: String = #function, defaultValue: String? = nil) -> String? {
        if (defaultValue != nil) && ffd_objectForKey(key) == nil { return defaultValue! }
        return FFDUserDefaults.string(forKey: key)
    }

    // MARK: Set Get object for key
    func ffd_setObject(_ newValue: AnyObject?, key: String = #function) {
        FFDUserDefaults.ffd_set(newValue, key: key)
    }
    
    func ffd_objectForKey(_ key: String = #function, defaultValue: AnyObject? = nil) -> AnyObject? {
        if (defaultValue != nil) &&  ffd_objectForKey(key) == nil { return defaultValue }
        return FFDUserDefaults.object(forKey: key) as AnyObject?
    }
    
    

使用的时候,只需要预先给变量设置如下get,set方法,这里就没有繁琐的key需要设置,也可以设置默认值

 var string1: String? {
        get { return FFDUserDefaults.ffd_stringForKey() }
        set { FFDUserDefaults.ffd_setString(newValue) }
    }

 var string2: String? {
        get { return FFDUserDefaults.ffd_stringForKey(defaultValue: "defaultValueString") }
        set { FFDUserDefaults.ffd_setString(newValue) }
    }

调用时候只需要如下操作即可

/// 设置并存储string1, string2的值
    FFDUserDefaults.string1 = "string1"
    FFDUserDefaults.string2 = "string2"
/// 获取string1, string2 的值
    let _ = FFDUserDefaults.string1
    let _ = FFDUserDefaults.string2

FFDExtension 还对Bool, Array, Dictionary,URL, Data等类型进行了处理
附DEMO

你可能感兴趣的:(UserDefaults+FFExtension(Swift版))