2. HTTP请求数据, 转成数据实体

import Foundation

//--- 数据实体的基础协议: 所有数据实体都须遵循它;
protocol YeProtocolForDecodableEntity
{
    //【静态方法】将二进制Data数据 (编码)转换为 本身实例对象 的方法:
    static func yeDataToSelf(eData:Data) -> Self?    
}
import UIKit

//--- 为数据实体类扩展协议, 以使其遵循此协议:
extension TyeDataEntity: YeProtocolForDecodableEntity{
    // 实现协议方法:(初始化)
    static func yeDataToSelf(eData: Data) -> Self? {
        return TyeDataEntity(eData: eData) as? Self
    }
}

//--- 数据实体 必须遵循: NSCopying, NSSecureCoding协议:以支持编解码功能,以持久化保存到磁盘中;
class TyeDataEntity: NSObject, NSCoding, NSSecureCoding {
    // 协议属性:
    static var supportsSecureCoding: Bool = true
    
    // 自定义的 属性字段:
    var eID : Int = 0
    var eName : String = "Name"
    var eAge : String = "15"
    var eTye : String = "Tye"
    //var eImage : UIImage = UIImage()
    
    // 1. 解析 Json:
    init?(eData:Data) {
        // 解析 Json:
        guard let eObj = try? JSONSerialization.jsonObject(with: eData, options: []) as? [String:Any] else { return nil }
            
        //--- 字段解析:
        guard let eIDLS = eObj["id"] as? Int else { return nil }
        self.eID = eIDLS
        
        // 二级 字典:
        guard let eDic = eObj["dic"] as? [String: Any] else { return nil }
        
        if let eNameLS = eDic["name"] as? String{
            self.eName = eNameLS
        }
        
        if let eAgeLS = eDic["age"] as? String{
            self.eAge = eAgeLS
        }
        
        // 三级 字典:
        if let eDicT = eDic["dicT"] as? [String: Any] {
            if let eTyeLS = eDicT["tye"] as? String {
                self.eTye = eTyeLS
            }
        }
        
    }
    
    //--- 协议方法:
    // 2. 解码:
    required init?(coder: NSCoder) {
        super.init()
        self.eID = coder.decodeInteger(forKey: "id")
        self.eName = coder.decodeObject(forKey: "name") as! String
        self.eAge = coder.decodeObject(forKey: "age") as! String
        self.eTye = coder.decodeObject(forKey: "tye") as? String ?? "Tye"
    }
    
    // 3. 编码:
    func encode(with coder: NSCoder) {
        coder.encode(self.eID, forKey: "id")
        coder.encode(self.eName, forKey: "name")
        coder.encode(self.eAge, forKey: "age")
        coder.encode(self.eTye, forKey: "tye")
    }
    
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 均出自:https://github.com/jackfrued/Python-100-Days[https://...
    千万别加香菜阅读 343评论 0 2
  • 用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你...
    hw1212阅读 14,099评论 2 59
  • 元宇宙拍卖管理平台 后疫情时代的到来,线上拍卖成为行业主流,如何提高拍卖业务的稳定性、时效性、安全性是企业...
    牵手到永远阅读 99评论 0 0
  • 条码打印机单张打印检测,如何解决条码防重码、标签缺陷? 斑马ZT610打印机单张打印检测(支持斑马原装剥离、切刀)...
    8149213d3bd3阅读 189评论 0 0
  • 继医院、理发店以后,又有一个地方让我感受到了被支配又无力的恐惧,那就是银行。 今天急需办理一张银行卡,一大早,银行...
    一沙一砾阅读 257评论 2 9

友情链接更多精彩内容