阅读 73

swift--使用UserDefaults来进行本地数据存储

UserDefaults适合轻量级的本地客户端存储,存储一个值,新值可以覆盖旧值,可以重复存储,也可以存储一次,然后直接从UserDefaults里面读取上次存储的信息,很方便,用的时候,宏定义下,直接调用!

轻量级数据库的话,移动端一般使用SQlite数据库,也是一款轻量级的适合移动端设备的数据库,具体可以参考我以前写的关于SQlite的博客,当然了UserDefaults根本不用管这些东西,直接就想读取字符串一样,直接读取就可以了!

UserDefaults支持的数据格式也很多:有:Int,Float,Double,BOOL,Array,Dictionary,甚至 Any 类型

1. 样例展示:

func get_uuid() -> String {
        let userID = UserDefaults.standard.string(forKey: "HHGGLL")        //判断UserDefaults中是否已经存在
        if userID != nil {            return userID!
        }else{
            let uuid_ref = CFUUIDCreate(nil)
            let uuid_string_ref = CFUUIDCreateString(nil, uuid_ref)
            let uuid = uuid_string_ref! as String
            UserDefaults.standard.set(uuid, forKey: "HHGGLL")            return uuid
        }
    }

输出:

 print("用户的UUID:(get_uuid())")

如上图!

2.其他基本数据类型和any类型的存储

 //存储练习
        let userDefault = UserDefaults.standard        //any
        userDefault.set("hgl001", forKey: "object")
        let objectValue:Any? = userDefault.object(forKey: "object")
        print("(objectValue as! String)")        //int
        userDefault.set(12345, forKey: "int")
        let intValue = userDefault.integer(forKey: "int")
        print(intValue)        //float
        userDefault.set(3.2, forKey: "float")
        let floatValue = userDefault.float(forKey: "float")
        print(floatValue)        //double
        userDefault.set(5.2369, forKey: "double")
        let doubleValue = userDefault.double(forKey: "double")
        print(doubleValue)        //bool
        userDefault.set(true, forKey: "bool")
        let boolValue = userDefault.bool(forKey: "bool")
        print(boolValue)        //url
        userDefault.set(URL(string:"http://hangge.com")!, forKey: "URL")
        let urlValue = userDefault.url(forKey: "URL")
        print(urlValue)        //string类型
        userDefault.set("hgl is a hero!", forKey: "string")
        let stringValue = userDefault.string(forKey: "string")
        print(stringValue)        //nsnumber类型
        var number = NSNumber(value:22)
        userDefault.set(number, forKey: "number")
        number = userDefault.object(forKey: "number") as! NSNumber
        print(number)        //array类型
        var array:Array = ["123","223"]
        userDefault.set(array, forKey: "Array")
        array = userDefault.array(forKey: "Array") as! [String]
        print(array)        //Dictionary类型
        var dictory = ["name":"hero11223"]
        userDefault.set(dictory, forKey: "dictory")
        dictory = userDefault.dictionary(forKey: "dictory") as! [String:String]
        print(dictory)        //系统对象的存储与读取
        let userDeafaults = UserDefaults.standard        //存储对象
        let label = UILabel()
        label.text = "天空飘来五个字"
        let labelData = NSKeyedArchiver.archivedData(withRootObject: label)        //存储data对象
        userDefault.set(labelData, forKey: "labelData")        
        //对象读取        //获取data
        let objData = userDefault.data(forKey: "labelData")        //还原对象
        let mylabel = NSKeyedUnarchiver.unarchiveObject(with: objData!) as? UILabel
        print(mylabel)        //UIImage对象存储
        let image1 = UIImage(named:"1.jpeg")
        let image2 = UIImage(cgImage: (image1?.cgImage!)!, scale: (image1?.scale)!,
                             orientation: (image1?.imageOrientation)!)
        let imageData = NSKeyedArchiver.archivedData(withRootObject: image2)        //存储Data对象
        userDefault.set(imageData, forKey: "imageData")        
        //UIImage对象读取        //获取Data
        let objDatas = userDefault.data(forKey: "imageData")        //还原对象
        let myImg = NSKeyedUnarchiver.unarchiveObject(with: objDatas!)
        print("输出是(myImg)")

打印如下图:

 3.删除存储对象

通过removeObject()方法可以删除已保存的数据

UserDefaults.standard.removeObject(forKey: "key值")


文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐