我正在尝试使用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)
}
}
}
答案 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))
}