美文网首页iOS面试
Swift-自动归档

Swift-自动归档

作者: SK丿希望 | 来源:发表于2018-06-01 23:28 被阅读47次

使用

import UIKit

class ViewController: UIViewController {

    let p  = UserInfo()
    override func viewDidLoad() {
        super.viewDidLoad()
        p.name = "yusong"
        p.age = 20
//        p.professional = "ios"
        p.address = "jiaotukeji"
    }

   // MARK: - 归档
    @IBAction func archiveclick(_ sender: Any) {
        UserTool.saveUser(p)
    }
   // MARK: - 解档
    @IBAction func solutionFileClick(_ sender: Any) {
        let p = UserTool.getUser()
        guard let user = p else{
            print("文件不存在")
            return
        }
        print(user.name,user.address ,user.age ,user.professional)
    }
    // MARK: - 删档
    @IBAction func removeClick(_ sender: Any) {
    UserTool.removeUser()
    }
}

实现

import UIKit

@objcMembers class UserInfo: NSObject,NSCoding {
    // MARK: - 属性
    var name :String?
    var address :String?
    var professional:String = "123" // 给定初始值
    var age :Int = 0

    // MARK: - 初始方法
    override init() {
        super.init()
    }
    // MARK: - 归档
    func encode(with aCoder: NSCoder) {
        for Strname in getAllPropertys() {
            let value = self.value(forKey: Strname)
            aCoder.encode(value, forKey: Strname)
        }
    }
    // MARK: - 解档
    internal required init?(coder aDecoder: NSCoder){
        super.init()
        for Strname in getAllPropertys() {
            let value = aDecoder.decodeObject(forKey: Strname)
            //利用kvc给属性赋值
            setValue(value, forKeyPath: Strname)
        }
    }
    // MARK: - 获取属性数组
    func getAllPropertys()->[String]{
        // 这个类型可以使用CUnsignedInt,对应Swift中的UInt32
        var count: UInt32 = 0
        let properties = class_copyPropertyList(self.classForCoder, &count)
        var propertyNames: [String] = []
        // Swift中类型是严格检查的,必须转换成同一类型
        for i in 0..<Int(count) {
            // UnsafeMutablePointer<objc_property_t>是可变指针,因此properties就是类似数组一样,可以通过下标获取
            let property = properties![i]
            let name = property_getName(property)
            // 这里还得转换成字符串
            let strName =  String(cString: name)
            propertyNames.append(strName);
        }
        // 不要忘记释放内存,否则C语言的指针很容易成野指针的
        free(properties)
        return propertyNames;
    }
    // MARK: - 获取对应属性的值 没有侧返回nil
    func getValueOfProperty(property:String)->AnyObject?{
        let allPropertys = self.getAllPropertys()
        if(allPropertys.contains(property)){
            return self.value(forKey: property) as AnyObject
        }else{
            return nil
        }
    }
}
class UserTool{
    // MARK: - 归档路径设置
   static private var Path: String{
        let path = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).last!
        return (path as NSString).appendingPathComponent("account.plist")
    }
    /// 存档
    static func saveUser(_ user: NSObject){
        NSKeyedArchiver.archiveRootObject(user, toFile: Path)
    }
    /// 获取归档模型
    static func getUser()-> UserInfo? {
        let user = NSKeyedUnarchiver.unarchiveObject(withFile: Path) as? UserInfo
        return user
    }
    /// 删除归档
    static func removeUser() {
        if FileManager.default.fileExists(atPath: Path){
            try! FileManager.default.removeItem(atPath: Path) // 删除文件
        }else{
            
        }
    }
}

Dome

相关文章

  • Swift-自动归档(HandyJSON转模型)

    本文是依赖HandyJSON转模型来实现归档不需要依赖第三方可以看Swift-自动归档[https://www.j...

  • Swift-自动归档

    使用 实现 Dome

  • Swift-自动归档(改进)

    前言:使用自动归档我们需要遵守NSCoding协议,但是通过一些Json转Model的工具来完成转Model后,比...

  • Swift-自动归档存储用户信息

  • Swift-归档解归档

    1.遵守NSSecureCoding协议 2.实现协议的两个方法 3.自定义方法,读取和保存数据

  • Oracle归档日志

    显示归档日志信息 1,使用ARCHIVE LOG LIST命令可以显示日志操作模式,归档位置,自动归档机器要归档的...

  • runtime自动归档

    前言 善用runtime,可以解决自动归档解档。想想以前归档是手动写的,确实太麻烦了。现在有了runtime,我们...

  • 自动解归档

    ios应用常用的数据存储方式 plist(XML属性列表归档) 偏好设置NSUserDefault NSKeyde...

  • runtime 自动归档

    提到归档这块,首先得看了一下,常规的归档方法(又名序列化),把对象转为字节码,以文件的形式存储到磁盘上;程序运行过...

  • runtime自动归档/解档

    前言 善用runtime,可以解决自动归档解档。想想以前归档是手动写的,确实太麻烦了。现在有了runtime,我们...

网友评论

    本文标题:Swift-自动归档

    本文链接:https://www.haomeiwen.com/subject/acdlsftx.html