ios - 将数据附加到数组时调用中的额外参数
问题描述
我有一个自定义表格单元格,它带有图像和一些字符串。现在我进行异步调用以获取一些可以正常工作的 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)
}
}
}
}
解决方案
您的 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 发生变化并且您的密钥没有为您提供值,您的应用程序将会崩溃。所以安全地打开你的价值观并使用它们。避免使用NSArray
and NSDictionary
。使用Array
andDictionary
代替。