使用没有循环的 swiftyjson 解析 JSON

Parse JSON using swiftyjson without loop

我正在尝试使用 SwiftyJSON 解析 JSON。我已经能够成功地完成我需要的一切,但我认为有更好的方法可以使代码更清晰、更快速地使用平面图之类的东西。

现在我在 API 调用后得到 JSON 数据。我正在使用此代码解析 JSON 数据并将其放入自定义 class 的数组中,联系方式。自定义 class "Contact" 中有一堆字符串,例如 "firstName," "lastName," 和 "phoneNumber".

这是调用的样子以及用于解析完成处理程序中的 JSON 的循环。有没有更好的方法使用平面图或其他东西来做到这一点?

Alamofire.request(url, method: .get).responseJSON{ response in
    switch response.result {
    case .success(let value):

        let swiftyJsonVar = JSON(response.result.value!)
        let totalResponseArray = swiftyJsonVar.arrayValue

        var allTheContacts = [Contact]()

        for contact in 0 ..< totalResponseArray.count{

            let itterateArray = totalResponseArray[contact] //singleRetailer
            let contactToAppend = Contact()

            contactToAppend.firstName = itterateArray["firstName"].stringValue
            contactToAppend.lastName = itterateArray["lastName"].stringValue
            contactToAppend.phoneNumber = itterateArray["phone"].stringValue

            allTheContacts.append(contactToAppend)
        }
    }
}

使用这个地图功能

var allTheContacts  = totalResponseArray.map { (obj) -> Contact in

 let contactToAppend = Contact()
 contactToAppend.firstName = obj["firstName"].stringValue
 contactToAppend.lastName = obj["lastName"].stringValue
 contactToAppend.phoneNumber = obj["phone"].stringValue
    return contactToAppend
}

您几乎无法使用映射或循环函数。没有比这更简单的方法了。如果您尝试清理代码,要记住的一件事是 swift JSON 数组中的对象是 JSON 对象。因此,我尝试在代码中做的一件事是将 JSON 的解析抽象为它所属的 class 的初始化函数。

class Contact {
    var firstName: String
    var lastName: String
    var phoneNumber: String

    init(json: JSON) {
        contactToAppend.firstName = obj["firstName"].stringValue
        contactToAppend.lastName = obj["lastName"].stringValue
        contactToAppend.phoneNumber = obj["phone"].stringValue
    }
}

有了这样的东西,你可以定义你的循环更简单,或者你可以使用一个简单的地图。

var allTheContacts  = totalResponseArray.map { (obj) -> Contact in
    return contact(json: obj)
}

或循环版本

var allTheContacts = [Contact]()
for contact in totalResponseArray {
    allTheContacts.append(Contact(json: contact))
}