首页 > 解决方案 > 将数据附加到数组时调用中的额外参数

问题描述

我有一个自定义表格单元格,它带有图像和一些字符串。现在我进行异步调用以获取一些可以正常工作的 JSON。得到我的 JSON 后,我试图将它附加到我的数组中,但我在调用中得到了额外的参数。下面是我的示例代码:

//数组详细信息的结构

struct CellData {
    let image: UIImage?
    let name: String?
    let distance: String?
    let desc: String?
}
var locationData = [CellData]()
//Then in my background thread

let responseMessage = parseJSON["RESPONSEMESSAGE"] as! NSArray?
if let array = responseMessage {
    for obj in array{
        if let dict = obj as? NSDictionary {
            let shopName = dict.value(forKey: "NAME") as? String
            let shopLandMark = dict.value(forKey: "LANDMARK") as! String?
            var shopDistance = dict.value(forKey: "DISTANCE") as! String?
            shopDistance = "\(shopDistance) km"
            DispatchQueue.main.async {
                self.locationData.append(image: #imageLiteral(resourceName: "wifi"), shopName!, shopDistance!, shopLandMark!) //Error on this line (Extra argument in call)
            }


        }
    }
}

标签: iosarraysswift

解决方案


您的 append 只接受一个参数 - type 的一个实例CellData

您需要创建该类型的实例CellData并将该实例附加到数组中。

DispatchQueue.main.async {
    for obj in array{
        if let dict = obj as? [String: String] {
            if let shopName = dict["NAME"] as? String, let shopLandMark = dict.["LANDMARK"] as? String?, let shopDistance = dict["DISTANCE"] as? String? {
                let shopLocation = CellData(image: #imageLiteral(resourceName: "wifi"), name: shopName, distance: shopDistance, desc: shopLandMark)
                locationData.append(shopLocation)
            }
        }
    }
    tableView.reloadData()
}

如果您的响应 API 发生变化并且您的密钥没有为您提供值,您的应用程序将会崩溃。所以安全地打开你的价值观并使用它们。避免使用NSArrayand NSDictionary。使用ArrayandDictionary代替。


推荐阅读