2017-05-23 93 views
0

我想解析使用SwiftyJSON的JSON。我已經能夠成功地完成所有我需要的功能,但我認爲有更好的方法可以使代碼更簡潔,更快速地使用像flatmap這樣的東西。使用swiftyjson無循環解析JSON

現在我正在獲取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) 
     } 
    } 
} 

回答

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

您使用的是地圖或循環功能非常堅持。這並不是一個簡單的方法。有一點要記住,如果你想清理你的代碼,那麼swift JSON數組中的對象就是JSON對象。所以我嘗試在代碼中做的事情之一就是將JSON解析爲它所屬類的初始化函數。

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