首页 > 其他分享 >swift--使用UserDefaults来进行本地数据存储

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

时间:2023-08-22 15:33:11浏览次数:47  
标签:set forKey userDefault -- let print UserDefaults swift

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())")

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

如上图!

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)")

打印如下图:

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

 3.删除存储对象

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

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

 

作者:稻草人11223

标签:set,forKey,userDefault,--,let,print,UserDefaults,swift
From: https://blog.51cto.com/u_13188203/7190270

相关文章

  • C++ 面向对象开发1
    ObjectBased:面对的是单一class的设计;ObjectOriented:面对的是多重classes的设计,classes和classes之间的关系。class前向声明,声明,定义。函数若在classbody中定义完成,便自动成为inline函数。如果函数太复杂就不会成为inline。overload的函数编译之后签名不同。虽然参数列表不......
  • swift开发之 -- 自动轮播图(UIScrollView+UIPageControl+Timer)
    比较简单,原理就不说了,这里只做记录:代码如下:1,准备varpageControl:UIPageControl?varmyscrollView:UIScrollView?varmyTimer:Timer?varmycurrentPage:NSInteger?varcourses=[["name":"first","pic":"1.jpeg&qu......
  • ios开发之 -- NSData 和 NSString , UIImage 等之间的互转
    1//NSData转换为UIImage2NSData*imageData=[NSDatadataWithContentsOfFile:imagePath];3UIImage*image=[UIImageimageWithData:imageData];45//UIImage转换为NSData6NSData*imageData=UIImagePNGRepresentation(aimae);1.......
  • 技术领先的用友iuap平台,助力升级数智化底座、驾驭数智未来
    8月19日下午,由用友主办的“2023全球商业创新大会-企业数智化技术峰会”,在上海市“国家会展中心”隆重召开。此次峰会以“升级企业数智化底座”为主题,与众多行业领先企业大咖、生态伙伴,揭秘用友BIP核心技术与平台能力,解析多维度场景下企业数智化底座升级路径,共享行业领先企业升级数......
  • 数字藏品app制作软件
      数字藏品的市场发展,促进更多的人进来制作开发数字藏品app软件,这些软件能为用户提供给各种的价值,实现商品的流通转换,帮助我们找到适合自己的藏品。  首先,数字藏品app制作软件通常具有艺术创作功能,这些软件提供了各种绘画、图形设计工具,使用户能够尽情地表达自己的想法和......
  • ios开发之--UICollectionView的使用
    最近项目中需要实现一种布局,需要用到UICollectionView,特在此整理记录下!贴上最终实现的效果图: 1,声明@interfaceFirstViewController()<UICollectionViewDelegate,UICollectionViewDataSource,UICollectionViewDelegateFlowLayout>@property(nonatomic,strong)UICollectionView*m......
  • VNPY-网络交易(算法交易)
    fromvnpy.trader.constantimportDirectionfromvnpy.trader.objectimportTradeData,OrderData,TickDatafromvnpy.trader.engineimportBaseEnginefromvnpy.trader.constantimportOrderType,Offset,Directionfrom..templateimportAlgoTemplateimportmat......
  • VNPY-网格交易(策略交易)
    ##grid_trade_strategy.pyfromvnpy_ctastrategyimport(CtaTemplate,StopOrder,TickData,BarData,TradeData,OrderData,BarGenerator,ArrayManager,)fromvnpy.trader.constantimportOrderType,Offset,DirectionclassGr......
  • 查找你的apple订单
     两个途径!不同商品对应!1.获取关于你通过Apple购买的内容的帮助https://support.apple.com/zh-cn/HT2040882.通过苹果官方的订单号查询https://www.apple.com.cn/store......
  • vue中watch和computed的区别
    computed中的console.log会执行吗?然而,需要注意的是,console.log语句在计算属性计算期间执行的结果将被打印到浏览器的开发者工具控制台中,并不会直接在页面上显示。如果你希望在页面上显示计算属性的值,可以将其绑定到模板中进行显示。computed的触发时机?在Vue中,computed属性的......