[英]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.