Swift-归档和解档

项目中遇到需要存储的数据目前有四种方式,偏好设置(UserDefaults),文件存储,SQLite,CoreData,第一种方式比较简单,第二种方式一般使用归档和解档的方式实现,先来简单了解一下App基本目录:


FlyElephant.png

偏好设置

偏好设置比较简单,设置数据取数据,代码如下:

let defaults:UserDefaults = UserDefaults.standard
        defaults.setValue("FlyElephant", forKeyPath: "userName")

设置的数据最终保存在Plist文件中:

FlyElephant.png

归档和解档

自定义对象存储需要实现NSCoding协议中的encode和decode方法:

public protocol NSCoding {

    
    public func encode(with aCoder: NSCoder)

    public init?(coder aDecoder: NSCoder) // NS_DESIGNATED_INITIALIZER
}

自定义归档的Order对象:

class Order:NSObject,NSCoding {
    
    var orderName:String = ""
    
    var userName:String = ""
    
    init(orderName:String, userName:String) {
        self.orderName = orderName
        self.userName = userName
        super.init()
    }
    
    required init?(coder aDecoder: NSCoder) {
        super.init()
        self.orderName = aDecoder.decodeObject(forKey: "OrderName") as! String
        self.userName = aDecoder.decodeObject(forKey: "UserName") as! String
    }
    
    func encode(with aCoder: NSCoder) {
        
        aCoder.encode(self.orderName, forKey:"OrderName")
        
        aCoder.encode(self.userName, forKey: "UserName")
    }
    
}

归档操作:

@IBAction func archiverAction(_ sender: UIButton) {
        
        let order:Order = Order(orderName: "123456789", userName: "FlyElephant")
        
        NSKeyedArchiver.archiveRootObject(order, toFile: getSavePath())
    }

解档操作:

@IBAction func unArchiverAction(_ sender: UIButton) {
        
        let order:Order = NSKeyedUnarchiver.unarchiveObject(withFile: getSavePath()) as! Order
        
        print("订单的名称:\(order.orderName)---用户名称--\(order.userName)")
        
    }

存储路径:

private func getSavePath()->String {
        let cacheDir:String = NSSearchPathForDirectoriesInDomains(.cachesDirectory, .userDomainMask, true)[0]
        let localPath:String = cacheDir.appending("TempTest.plist")
        return localPath;
    }

保存数据:


FlyElephant.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 归档 NSCoding,实现两个方法 AccessToken 是后续所有网络访问的重要依据 /// 构造函数,一...
    玉松阅读 1,757评论 0 3
  • 1、 沙盒概念基本介绍 iOS 应用程序只能在该 app 的文件系统中读取。这个默认的 app 文件系统就是我们说...
    Laughingg阅读 2,775评论 2 10
  • 概论 所谓的持久化,就是将数据保存到硬盘中,使得在应用程序或机器重启后可以继续访问之前保存的数据。在iOS开发中,...
    Leeson1989阅读 1,968评论 4 1
  • 前言 iOS本地缓存数据方式有五种: 1.直接写文件方式*.plist:可以存储的对象有NSString、NSAr...
    随心吧阅读 2,050评论 0 18
  • #清凉法语# 难得糊涂才是上道 孔子发现了糊涂,取名中庸;老子发现了糊涂,取名无为;庄子发现了糊涂,取名逍遥;墨子...
    xcy无名阅读 317评论 0 0