CoreParser
特性
- 递归解析算法
- 解析原始类型
- 不同的日志级别
安装
Cocoapods
pod 'CoreParser'
使用
假设有一个名为 user 的对象,它有必需和可选字段。在 Swift 中它看起来像这样。
class User {
var firstName: String = ""
var secondName: String = ""
var middleName: String? = nil
}
这意味着姓名和姓氏是必需的,中间名是可选的。因此,如果您从服务器获取不带必需字段的 user,则应该拒绝它。例如
{
"user": {
"last_name": "Appleseed",
"middle_name": "Key"
}
}
在实际中拒绝“错误的”对象是非常重要的:如果只使用可选类型,则可能会使您的应用程序崩溃,或者导致未定义的行为。
// Convert Data into object (dictionary or array) after network response
let json = try JSONSerialization.jsonObject(with: jsonData, options: [])
// Initialize your parser with required log level
let parser = AccountParser(logLevel: .logMandatoryFields)
// Parse response
// If you wait only one object, just add .first in the end
let users = parser.parse(json)
user 的解析器如下所示
class UserParser: JSONParser<User> {
override func parseObject(_ data: JSON) -> User? {
// call this method only if you need logs
printAbsentFields(in: data)
// checking for mandatory fields
guard
let firstName = data["first_name"]?.string,
let lastName = data["last_name"]?.string
else {
return nil
}
let object = User()
object.firstName = firstName
object.lastName = lastName
object.middleName = data["middle_name"]?.string
return object
}
// override this method only if you need logs
override class func modelFields() -> Fields {
return Fields(
mandatory: Set(["first_name", "last_name"]),
optional: Set(["middle_name"])
)
}
}
如果您的后端将键 user
更改为 data
,则由于其算法将继续工作:JSON 键仅分析解析器递归尝试找到的属性。
有关更多信息,请参阅示例项目。
TODOs
- 创建并返回解析失败的对象错误
- 对于单一对象只记录一次错误
作者
Ivan Vavilov, [email protected]
Andrey Rozhkov, [email protected]
需求
- Xcode 9
- Swift 4
- iOS 8
许可协议
CoreParser遵循MIT许可协议。更多信息请参阅LICENSE文件。