Ios 从swift中的响应获取数组
我试图在我的模型对象中获得响应,但面临一个问题,它只显示响应的第一项,这是我的代码Ios 从swift中的响应获取数组,ios,swift,Ios,Swift,我试图在我的模型对象中获得响应,但面临一个问题,它只显示响应的第一项,这是我的代码 func getUserBalanceAPI() { APIService.getUserBalance{ (responseObject) in if (responseObject?.status)! { self.balanceArray.removeAll() let user = UserCompleteBalance(JSO
func getUserBalanceAPI()
{
APIService.getUserBalance{ (responseObject) in
if (responseObject?.status)! {
self.balanceArray.removeAll()
let user = UserCompleteBalance(JSON: (responseObject?.data as! [[String : Any]]).first!)
self.balanceArray.append(user!)
//Reload Collection View
self.currencyCVC.reloadData()
}
else if !(responseObject?.status)! {
Utilities.showBar(text: responseObject?.errorObject?.message)
}
}
}
如何获取数组中的所有项?这是我的回答,
"responseBody": {
"data": [
{
"auction_deposit": 4083.63,
"currencyCode": "USD",
"userCurrencyId": 1,
"availableBalance": 64555.1,
"currentBalance": 68638.73
},
{
"auction_deposit": 0.0,
"currencyCode": "AED",
"userCurrencyId": 2,
"availableBalance": 198000.0,
"currentBalance": 198000.0
},
{
"auction_deposit": 0.0,
"currencyCode": "EUR",
"userCurrencyId": 3,
"availableBalance": 50000.0,
"currentBalance": 50000.0
}
]
}
这是我的模型课
class UserCompleteBalance : Mappable {
var auctionDeposit : Int?
var availableBalance : Int?
var currencyCode : Int?
var currentBalance : Int?
var userCurrencyId : Int?
required init?(map: Map) {
}
func mapping(map: Map) {
auctionDeposit <- map["auction_deposit"]
currencyCode <- map["currencyCode"]
userCurrencyId <- map["userCurrencyId"]
availableBalance <- map["availableBalance"]
currentBalance <- map["currentBalance"]
}
}
class UserCompleteBalance:可映射{
var拍卖保证金:整数?
var可用平衡:Int?
var currencyCode:Int?
var currentBalance:Int?
var userCurrencyId:Int?
必需的初始化?(映射:映射){
}
func映射(映射:映射){
auctionDeposit让user=UserCompleteBalance(JSON:(responseObject?.data as![[String:Any]])。首先!)
self.balanceArray.append(用户!)
上述行应在responseObject.data
您的getUserBalanceAPI
函数应该是
APIService.getUserBalance{ (responseObject) in
if (responseObject?.status)! {
self.balanceArray.removeAll()
if let jsonObjects = responseObject?.data as? [[String : Any]] {
for jsonObject in jsonObjects {
if let user = UserCompleteBalance(JSON: jsonObject) {
self.balanceArray.append(user)
}
}
}
//Reload Collection View
self.currencyCVC.reloadData()
} else if !(responseObject?.status)! {
Utilities.showBar(text: responseObject?.errorObject?.message)
}
}
}您的问题与这样一个事实有关,即您只获得字典数组中的第一个字典,因此您需要在UserCompleteBalance
模型上循环字典数组以转换每个字典
更新
您需要在闭包中使用[weak self]和strongSelf,以避免保留循环
尝试使用此代码
func getUserBalanceAPI()
{
APIService.getUserBalance{ [weak self] (responseObject) in
guard let strongSelf = self else {
return
}
if (responseObject?.status)! {
strongSelf.balanceArray.removeAll()
if let usersDataArray = responseObject?.data as? [[String : Any]] {
for userData in usersDataArray {
strongSelf.balanceArray.append(UserCompleteBalance(JSON:userData))
}
}
//Reload Collection View
strongSelf.currencyCVC.reloadData()
}
else if !(responseObject?.status)! {
Utilities.showBar(text: responseObject?.errorObject?.message)
}
}
}
我试着像这样循环它,对于responseObject?.data{}中的项但它向我显示了错误,键入“AnyObject?”不符合协议“Sequence”。@jacobLet让我们显示我的your classUserCompleteBalance
。顺便说一句,我在上面的代码中没有看到任何循环。@Hamzacheck我用模型类更新的问题,循环在我的注释中。@jacobAn接受的答案或向上投票将是我成功的一大动力或者我。谢谢。@Hamzayes这是完美的,解决了,非常感谢。@Reinier Melian您的欢迎,@Hamza检查我关于保留周期的更新,这对于在面对真正的问题之前避免这些问题很重要,快乐编码