public struct TestClass {
var string: String
var number: Float
var location: CLLocationCoordinate2D
var array: [Int]
var map: [String: AnyObject]
var set: Set<Float>
public init(string: String, number: Float, location: CLLocationCoordinate2D, array: [Int], map: [String: AnyObject], set: Set<Float>) {
self.string = string
self.number = number
self.location = location
self.array = array
self.map = map
self.set = set
}
}
let obj = TestClass(string: "String 1", number: 54, location: CLLocationCoordinate2DMake(39, 49), array: [1, 2, 3], map: ["key1" : ["key2": 43]], set: Set([1.4, 1, 3.6, 66.6]))
let serializedObj = Serializer.serialize(obj)
let deserializedObj = try! Serializer.deserialize(serializedObj)
如果将字典传递给序列化器,则键必须是 String 类型。
Swift 在运行时没有提供足够的信息来创建一个结构体的实例。因此,您将运行一个脚本,该脚本将自动生成一个文件,以便您可以动态创建您指定的结构体的实例。在 /Example/Tests/api.json
位置创建一个 json 文件,格式如下
{
"module_name": {
"class_name": "relative path to file"
}
}
如果类是内置的 Swift 类(但不是像 Int、String、Float 等这样的“原始”类型),则将相对路径设置为空字符串(即“”)并使用库中已提供的初始化器(如果存在)或创建自己的。查看内置 Swift 类部分以了解库中包含哪些类。
在文件中找到的第一个公共初始化器将用于反序列化
然后运行初始化器脚本 (/SwiftSerialize/Init.sh),并将 json 文件的路径作为第一个参数传递。您需要给予执行权限,因此请在执行脚本之前运行 chmod 555 Init.sh
您需要将您的自定义类设置为公共。将它们添加到构建阶段的目标的公共头文件中。并确保声明类为公共,初始化器为公共。
最后将包含您的类的框架添加到 SwiftSerialize 库中。
./SwiftSerialize/Init.sh Example/Tests/api.json
内置 Swift 类的初始化器(但不是像 Int、String、Float 等这样的“原始”类型)需要手动创建(这本身并不困难!)。因此,请将其添加到自己的项目中,或者甚至在更好,通过提交带有您创建的初始化器的 pull request 来这个仓库!
目前支持的内置 Swift 类列表
SwiftSerialize 通过 CocoaPods 提供。要安装它,只需将以下行添加到 Podfile 中
pod "SwiftSerialize"
要运行示例项目,请克隆仓库,并首先从 Example 目录中运行 pod install
运行 php SwiftSerialize/Init.php Example/Tests/apij.json SwiftSerialize/InitializerExtension.swift
以自动生成测试的初始化器。
将接受所有有效的pull请求、功能请求和其他问题。
SwiftSerialize可在MIT许可证下使用。有关更多信息,请参阅LICENSE文件。