使用swiftyjson解析JSON而不使用循环

时间:2017-05-23 01:38:30

标签: json swift swifty-json

我正在尝试使用SwiftyJSON解析JSON。我已经能够成功完成我需要的所有工作,但我认为有一种更好的方法可以使代码更简洁,更快速地使用像flatmap这样的东西。

现在我在API调用后获取JSON数据。我正在使用此代码来解析该JSON数据并将其放入自定义类的数组中。自定义类"联系"有一堆字符串,如#34; firstName," "姓氏,"和" phoneNumber"。

以下是调用的内容以及用于在完成处理程序中解析JSON的循环。有没有比使用flatmap或其他东西更好的方法呢?

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)
        }
    }
}

2 个答案:

答案 0 :(得分:0)

使用此地图功能

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
}

答案 1 :(得分:0)

你几乎使用地图或循环功能。没有太多简单的方法来做到这一点。如果您正在尝试清理代码,则需要记住的一件事是swift JSON数组中的对象是JSON对象。因此,我尝试在代码中做的一件事就是将JSON解析为它所属的类的init函数。

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))
}