swift实现归档解档

本文介绍了在Swift中如何实现对象的归档和解档,以保存和读取少量本地数据。通过创建一个用于存储数据的LoginData类,以及一个负责归档解档的DataManager类,详细阐述了关键步骤和注意事项,包括实现NSCoding协议,处理init方法,并展示如何保存数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在实际开发中,当有少量的信息需要写入到本地时,最最常用的方法就是归档解档,这里我们只讨论对对象的归档解档。
首先说一下主要思路,DataManager是用来归档数据的类,LoginData是用来储存数据的类,下面话不多说,上代码。

1.定义储存数据的类
//遵循协议,实现两个代理方法
class LoginData: NSObject, NSCoding {

    let TestAccount = "account"
    let TestPassword = "password"

    var account: String?
    var password: String?

    override init() {
        super.init()
    }

    required init?(coder aDecoder: NSCoder) {
        super.init()
        account = aDecoder.decodeObjectForKey(TestAccount) as? String
        password = aDecoder.decodeObjectForKey(TestPassword) as? String
    }

    func encodeWithCoder(aCoder: NSCoder) {
        if account?.characters.count > 0 {
            aCoder.encodeObject(account, forKey: TestAccount)
        }

        if password?.characters.count > 0 {
            aCoder.encodeObject(password, forKey: TestPassword)
        }
    }   
}

注意:这里要特别注意的是实现这两个代理方法后,类的init()构造方法就没有了,必须自己手动重写一下。
同时在init?(coder aDecoder: NSCoder)方法中也要调用一下父类的init()方法

2.定义储归档解档数据的类
class LoginManager: NSObject {

    var filepath: String?
    //重写currentLoginData的setting方法,以便外界调用时执行保存数据的操作
    var currentLoginData: LoginData? {
        didSet {
            saveData()
        }
    }
    //单例
    static let sharedManager: SXLoginManager = {
        //NTESFileLocationHelper是一个获取文件路径的类,也可以直接获取路径
        let filePath = NTESFileLocationHelper.getAppDocumentPath().stringByAppendingString("Test_login_data")
        let manager = SXLoginManager.init(filepath: filePath)
        return manager
    }()
    //自定义构造方法用来保存文件路径
    init(filepath: String) {
        self.filepath = filepath
        super.init()
    }

    //读取数据
    private func readData() {
        if NSFileManager.defaultManager().fileExistsAtPath(filepath!) {
            let objcet = NSKeyedUnarchiver.unarchiveObjectWithFile(filepath!) as? LoginData
            currentLoginData = objcet
        }
    }

    //保存数据
    private func saveData() {
        var data = NSData()
        if currentLoginData != nil {
            data = NSKeyedArchiver.archivedDataWithRootObject(currentLoginData!)
        }
        data.writeToFile(filepath!, atomically: true)
    }   
}
3.保存数据
let loginData = LoginData()
loginData.account = self.telTextFieldValue
loginData.password = self.passwordtFieldValue
SXLoginManager.sharedManager.currentLoginData = loginData
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值