swift4.0 归档解档_openstack swift 2.20.0 2.21.0 - CSDN
  • swift 本地归档解档储存

    千次阅读 2017-01-17 16:43:22
    1.对用户的模型数据(自定义类:HCUserModel)进行归档和解 1.1 需要遵循NSCoding协议 1.2 需要实现func encode(with aCoder: NSCoder){}归档方法 1.3需要实现 required init(coder aDecoder: NSCoder)...

    1.对用户的模型数据(自定义类:HCUserModel)进行归档和解档

    1.1 需要遵循NSCoding协议

    1.2 需要实现func encode(with aCoder: NSCoder){}归档方法

    1.3需要实现 required init(coder aDecoder: NSCoder){}解档方法

    1.4 重写init方法

    2.HCUserModel的数据内容如下:

    import UIKit


    class HCUserModel: NSObject,NSCoding {

        

        var id:Int?

        var nickname:String?

        var phone:String?

        var account:String?

        var password:String?

        var type:Int?

        var icon:String?

        var attentionnumber:Int?

        var registertime:String?

        var qrcode:String?

        var signature:String?

        var dynamicstruts:Int?

        var score:Int?

        

        // MARK:- 处理需要归档的字段

        func encode(with aCoder:NSCoder) {

            

            aCoder.encode(id, forKey:"id")

            aCoder.encode(nickname, forKey:"nickname")

            aCoder.encode(phone, forKey:"phone")

            aCoder.encode(account, forKey:"account")

            aCoder.encode(password, forKey:"password")

            aCoder.encode(type, forKey:"type")

            aCoder.encode(icon, forKey:"icon")

            aCoder.encode(attentionnumber, forKey:"attentionnumber")

            aCoder.encode(registertime, forKey:"registertime")

            aCoder.encode(qrcode, forKey:"qrcode")

            aCoder.encode(signature, forKey:"signature")

            aCoder.encode(dynamicstruts, forKey:"dynamicstruts")

            aCoder.encode(score, forKey:"score")

        }

        

        // MARK:- 处理需要解档的字段

        requiredinit(coder aDecoder:NSCoder) {

            super.init()

            id = aDecoder.decodeObject(forKey:"id")as?Int

            nickname = aDecoder.decodeObject(forKey:"nickname")as?String

            phone = aDecoder.decodeObject(forKey:"phone")as?String

            account = aDecoder.decodeObject(forKey:"account")as?String

            password = aDecoder.decodeObject(forKey:"password")as?String

            type = aDecoder.decodeObject(forKey:"type")as?Int

            icon = aDecoder.decodeObject(forKey:"icon")as?String

            attentionnumber = aDecoder.decodeObject(forKey:"attentionnumber")asInt

            registertime = aDecoder.decodeObject(forKey:"registertime")as?String

            qrcode = aDecoder.decodeObject(forKey:"qrcode")as?String

            signature = aDecoder.decodeObject(forKey:"signature")as?String

            dynamicstruts = aDecoder.decodeObject(forKey:"dynamicstruts")asInt

            score = aDecoder.decodeObject(forKey:"score")as?Int

        }

        overrideinit() {

            super.init()

        }

    }


    3. 实现归档把模型保存到本地Document文件夹:
    3.1 获取本地Document路径,一般路径都设为全局变量,方便解档直接使用:

    let userAccountPath ="\(NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory,

    FileManager.SearchPathDomainMask.userDomainMask,true).first!)/userAccount.data"


    3.2 对获取到的模型进行归档操作,要注意模型必须是确定的类型,如果是可选类型会报发送未识别的消息的错误(切记)

    NSKeyedArchiver.archiveRootObject(userModel!, toFile:userAccountPath)


    4.实现解档从Document文件夹获取本地模型数据

    4.1 判断Document文件夹下是否有已保存好的模型,有的话就解档取出模型

     if NSKeyedUnarchiver.unarchiveObject(withFile:userAccountPath) !=nil {

                

                userModel =NSKeyedUnarchiver.unarchiveObject(withFile:userAccountPath)asHCUserModel

            }


    展开全文
  • Swift 解档归档

    千次阅读 2017-03-22 15:31:37
    1.对用户的模型数据(自定义类:HCUserModel)进行归档和解 1.1 需要遵循NSCoding协议 1.2 需要实现func encode(with aCoder: NSCoder){}归档方法 1.3需要实现 required init(coder aDecoder: NSCoder){}...

    1.对用户的模型数据(自定义类:HCUserModel)进行归档和解档

    1.1 需要遵循NSCoding协议

    1.2 需要实现func encode(with aCoder: NSCoder){}归档方法

    1.3需要实现 required init(coder aDecoder: NSCoder){}解档方法

    import UIKit
    
    class YMUserAccount:NSObject,NSCoding {
    
        //MARK:-属性
        //授权AcccessToken
        var access_token:String?
        //过期时间-->秒
        var expires_in:TimeInterval=0.0{
            
            didSet{
                
                expires_date=Date(timeIntervalSinceNow: expires_in)
        
            }
            
        }
        //用户ID
        var uid :String?
        
        
        
        //昵称 
        var screen_name:String?
        var avatar_large:String?
        
        
        //额外参数
        var expires_date:Date?
        
        //MARK:-自定义构造函数
        init(dic:[String:AnyObject])
        {
            super.init()
        
            access_token=dic["access_token"] as! String?
            uid=dic["uid"] as! String?
            expires_in=dic["expires_in"] as! TimeInterval
            
            
        
        }
        override func setValuesForKeys(_ keyedValues: [String : Any]) {
            
        }
        
        
        //MARK:-解档 归档
        //解档的方法
        
       
        required init?(coder aDecoder: NSCoder) {
            
            super.init()
            
            access_token=aDecoder.decodeObject(forKey: "access_token") as! String?
            uid=aDecoder.decodeObject(forKey: "uid") as! String?
            expires_date=aDecoder.decodeObject(forKey: "expires_date") as! Date?
            screen_name=aDecoder.decodeObject(forKey: "screen_name") as! String?
            avatar_large=aDecoder.decodeObject(forKey: "avatar_large") as! String?
            
            
        }
    
    
        //归档的方法
        func encode(with aCoder: NSCoder) {
            
            aCoder.encode(access_token, forKey: "access_token")
            aCoder.encode(uid, forKey: "uid")
            aCoder.encode(expires_date, forKey: "expires_date")
            aCoder.encode(screen_name, forKey: "screen_name")
            aCoder.encode(avatar_large, forKey: "avatar_large")
        }
    
    }
    

    将account对象保存到本地
                
                  //获取沙盒路径
                var accountPath=NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first!
                 accountPath+="/userAccount.plist"
                print("路径:"+accountPath);
    
                NSKeyedArchiver.archiveRootObject(account, toFile: accountPath)

    //从沙盒中读取归档的信息
            
            var accountPath=NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first!
            accountPath+="/userAccount.plist"
            let account=NSKeyedUnarchiver.unarchiveObject(withFile: accountPath) as? YMUserAccount


    展开全文
  • Swift-归档解归档

    千次阅读 2016-04-05 11:58:14
    Swift中对象进行归档写入文件时需要对对象属性进行归档操和解归档操作 ,对象方法中需重写以下两个方法 //从nsobject解析回来 init(coder aDecoder:NSCoder!){ self.name=aDecoder.decodeObjectForKey("name") as...

    Swift中对象进行归档写入文件时需要对对象属性进行归档操和解归档操作
    ,对象方法中需重写以下两个方法

     //从nsobject解析回来
        init(coder aDecoder:NSCoder!){
            self.name=aDecoder.decodeObjectForKey("name") as! String
            self.phone=aDecoder.decodeObjectForKey("age") as! String
        }
    
        //编码成object
        func encodeWithCoder(aCoder:NSCoder!){
            aCoder.encodeObject(name,forKey:"name")
            aCoder.encodeObject(phone,forKey:"age")
        }

    归档,解归档需要使用到NSKeyedArchiver和NSKeyedUnarchiver来实现。

           //保存数据
           let data = NSMutableData()
           let archiver = NSKeyedArchiver(forWritingWithMutableData: data)
           archiver.encodeObject(userData,forKey: "userlist")
           archiver.finishEncoding()
           //数据写入
            data.writeToFile(dataFilePath, atomically: true)
    
           //读取数据
             //获取本地数据文件地址
             let path = self.dataFilePath()
                //读取文件数据
                let data = NSData(contentsOfFile: path)
                //解码器
                let unarchiver = NSKeyedUnarchiver(forReadingWithData: data!)
                userList = unarchiver.decodeObjectForKey("userdata") as! Array
                //结束解码
                unarchiver.finishDecoding()
    展开全文
  • 归档解档的最新写法,里面已经封装好归档解档的方法接口,直接拖进去使用就好了
  • iOS swift-归档解档

    2016-08-16 13:58:06
    1.被归档的对象所在类必须遵守协议...// MARK:- 归档&解档 /// 解档的函数 init?(coder aDecoder: NSCoder) { } /// 归档的函数 func encodeWithCoder(aCoder: NSCoder) { } 举例: 被归档的对象所在类中(遵守协议 N

    1.被归档的对象所在类必须遵守协议 NSCoding

    2.被归档的对象所在类必须两个函数来规定如何归档和解档

    // MARK:- 归档&解档
    /// 解档的函数
    init?(coder aDecoder: NSCoder) {
    }
        
    /// 归档的函数
    func encodeWithCoder(aCoder: NSCoder) {
    }

    举例:

    被归档的对象所在类中(遵守协议 NSCoding)

    UserAccount类

    // MARK:- 属性
    /// 授权AccessToken
    var access_token : String?
    /// 用户ID
    var uid : String?
    /// 过期日期
    var expires_date : NSDate?
    /// 昵称
    var screen_name : String?
    /// 用户的头像地址
    var avatar_large : String?

    // MARK:- 归档&解档
    /// 解档的函数
    required init?(coder aDecoder: NSCoder) {
        access_token = aDecoder.decodeObjectForKey("access_token") as? String
        uid  = aDecoder.decodeObjectForKey("uid") as? String
        expires_date  = aDecoder.decodeObjectForKey("expires_date") as? NSDate
        avatar_large  = aDecoder.decodeObjectForKey("avatar_large") as? String
        screen_name  = aDecoder.decodeObjectForKey("screen_name") as? String
    }
    
    /// 归档的函数
    func encodeWithCoder(aCoder: NSCoder) {
        aCoder.encodeObject(access_token, forKey: "access_token")
        aCoder.encodeObject(uid, forKey: "uid")
        aCoder.encodeObject(expires_date, forKey: "expires_date")
        aCoder.encodeObject(avatar_large, forKey: "avatar_large")
        aCoder.encodeObject(screen_name, forKey: "screen_name")
    }
    

    其它类中

    归档

    // 将account对象保存
    // 1.获取沙盒路径
    var accountPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).first!
    accountPath = (accountPath as NSString).stringByAppendingPathComponent("account.plist")
    
    // 2.保存对象
    NSKeyedArchiver.archiveRootObject(account, toFile: accountPath)

    解档

    // 从沙盒中读取归档的信息
    // 1.获取沙盒路径
    var accountPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).first!
    accountPath = (accountPath as NSString).stringByAppendingPathComponent("account.plist")
    
    // 2.读取信息
    let account = NSKeyedUnarchiver.unarchiveObjectWithFile(accountPath) as? UserAccount




    展开全文
  • 归档解档存储的对象必须是class,而不是结构体。使用结构体可以用协议方法去实现,请有意者自行查资料。 该class需要继承NSObject,才可以使用KVC的方法,通过key拿到值或者通过key赋值。这是一个牺牲,不想继承的...
  • Swift4.0入门视频教程,课程内容包含Swift入门知识、数据类型(元组、Dictionary、运算符)、流程控制、函数、类与对象、扩展协议、常见概念、实用进阶、案例实战。 1、119节大容量课程:包含了Swift4.0语言大部分...
  • Swift 4 在 Swift 3 的基础上,提供了更强大的稳健性和稳定性,为 Swift 3 提供源码兼容性,对标准库进行改进,并添加了归档和序列化等功能。 你可以通过观看 WWDC 2017: What’s New in Swift 或完整发行说明...
  • Swift 4.0 更新合集、新功能汇总

    万次阅读 2017-06-10 11:48:24
    Swift 4是苹果计划于2017年秋季推出的最新版本,其主要重点是提供与Swift 3代码的源兼容性,并努力实现ABI稳定性。 本文重点介绍对Swift的更改将对您的代码产生最大的影响。 而且,让我们开始吧!
  • Swift 4.0 Codable 序列化

    2018-09-21 14:39:35
    如果要将一个对象持久化,需要...Swift 4中引入了Codable协议,可以大大减轻了我们的工作量。我们只需要让需要序列化的对象符合Codable协议即可,不用再写任何其他的代码。 struct Language: Codable { var name...
  • Swift4.0 Codable协议:JSON和模型的转换

    万次阅读 2020-04-20 16:20:40
    在OC中,以及Swift4.0之前,系统一直没有一套数据解析的方法。在Swift4.0后,终于推出了Codable协议,可实现json数据和数据模型的相互转换。 首先来下 Codable ,它其实是一个组合协议,有 Decodable 和 Encodable ...
  • Swift4.0互动教程》正式发布

    千次阅读 2017-12-26 10:49:31
    免费下载地址:https://itunes.apple.com/cn/app/id1320746678◈ 不看视频不看书,手把手带您学习Swift语言◈ 利用手指来互动式学习Swift 4.0◈ 无痛上手,比观看视频、阅读书籍更加有趣、更加有效的学习方式 ◈ 变...
  • Swift 4.0 描述: 使用 NSCoding 进行 archive 和 unarchive 归档。旧的工程名叫 A, 新的工程名叫 B。A 曾经在设备上运行过,并使用 NSUserDefault 针对序列化后的Data进行持久化保存。 当更换工程名后,B 在运行...
  • 保存图片到本地 (Swift 4)

    千次阅读 2018-07-31 17:01:29
    /*****************************保存图片*************************************/ //MARK: 将图片保存在相册 ///保存图片 --> UIImageWriteToSavedPhotosAlbum func saveImageToAlbum(image:UIImage) { ...
  • NSCoding 这种方式是OC中就有的,比较老的方式,并且使用限制是只能是calss,然后实现NSCoding,对于struct是不能使用的。 internal func encode(with aCoder: NSCoder) { var count :UInt32 = 0 ...
  • swift数据持久化--归档

    2019-06-17 18:13:30
    2019独角兽企业重金招聘Python工程师标准>>> ...
  • //转载:http://www.helloswift.com.cn/swiftmanual/2015/0208/3486.html 应用沙盒结构分析 1、应用程序包:包含了所有的资源文件和可执行文件 2、Documents:保存应用运行时生成的需要持久化的数据,...
  • iOS 数据持久化(四)SQLite3

    千次阅读 2013-12-20 17:41:15
    iOS中有五种持久化数据的方式:属性列表、对象归档、NSUserDefaults、SQLite3和Core Data
  • iOS开发 -GameKit蓝牙开发

    千次阅读 2015-10-26 09:47:27
    蓝牙4.0蓝牙4.0是2012年最新蓝牙版本,是3.0的升级版本;较3.0版本更省电、成本低、3毫秒低延迟、超长有效连接距离、AES-128加密等;通常用在蓝牙耳机、蓝牙音箱等设备上。蓝牙技术联盟(Bluetooth SIG)2010年7月7日...
  • Swift访问Foundation框架

    千次阅读 2016-01-21 22:51:50
    Foundation框架提供了大量的界面无关的api,为 Core Foundation 框架的许多功能提供了 Objective-C和Swift 的封装。 下面的代码,基于Swift,对Foundation常用的api进行了简单的访问。
1 2 3 4 5 ... 13
收藏数 248
精华内容 99
关键字:

swift4.0 归档解档