簡體   English   中英

使用swiftyjson解析JSON而不循環

[英]Parse JSON using swiftyjson without loop

我正在嘗試使用SwiftyJSON解析JSON。 我已經能夠成功完成我需要做的所有事情,但是我認為有一種更好的方法可以使用Flatmap這樣的代碼使代碼更簡潔,更快速。

現在,在API調用之后,我正在獲取JSON數據。 我正在使用此代碼來解析該JSON數據,並將其放入自定義類Contact的數組中。 定制類“ 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
}

您幾乎無法使用map或loop函數。 沒有很多簡單的方法可以做到這一點。 如果要清理代碼,要記住的一件事是,快速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))
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM