CoreParser 2.3.0

CoreParser 2.3.0

Anton Glezman 维护。



  • 作者:
  • Ivan Vavilov

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文件。