Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/115.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 从swift中的响应获取数组_Ios_Swift - Fatal编程技术网

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 class
UserCompleteBalance
。顺便说一句,我在上面的代码中没有看到任何循环。@Hamzacheck我用模型类更新的问题,循环在我的注释中。@jacobAn接受的答案或向上投票将是我成功的一大动力或者我。谢谢。@Hamzayes这是完美的,解决了,非常感谢。@Reinier Melian您的欢迎,@Hamza检查我关于保留周期的更新,这对于在面对真正的问题之前避免这些问题很重要,快乐编码