-
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辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。