为 Swift 3.2 和 4 提供二进制自动解析功能。
要使用 Encoder 和 Decoder 类,您只需声明您的 Swift 类,其中所有属性都必须是 @objc dynamic
的,并且类 必须 继承自 NSObject
。 另外,Obj-c
可表示的对象可以是可选的,但非 obj-c
可表示的对象 必须 定义为非可选的。 但是 @objc dynamic
指令会强制您正确定义它。
将对象转换为数据的实现示例。
import Swift_Binary // very important
class Employee: NSObject {
@objc fileprivate(set) dynamic var name: String?
@objc fileprivate(set) dynamic var age: Int = 0
}
class Boss: Employee {
@objc fileprivate(set) dynamic var employees: [Employee]?
}
let employee1: Employee = Employee()
employee1.name = "John Apple Juice"
employee1.age = 35
let boss: Boss = Boss()
boss.name = "Steve James Apple Orange Juice"
boss.age = 65
boss.employees?.append(employee1)
let encoder = Encoder()
let binaryData: Data = try! encoder.encode(boss)
将数据转换为对象的实现示例。 注意:使用与上面相同的类。
let binaryData: Data = // binary NSData
let decoder = Decoder()
let boss: Boss = try! decoder.decode(binaryData)
assert(boss.name == "Steve James Apple Orange Juice")
assert(boss.age == 65)
assert(boss.employees![0].name == "John Apple Juice")
assert(boss.employees![0].age == 35)
如有任何疑问,请发布 issue 或创建 pull request。 欢迎提交 pull request。 谢谢。