class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
@IBOutlet weak var TableViewOutlet: UITableView!
let URL_GET_DATA = "https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=17.500010,78.461527&radius=1000&types=atm&key=AIzaSyA4G66cD6FTzU1UnLO2UHL2rpehzDNa2v4"
var icons = [Icon]()
override func viewDidLoad() {
super.viewDidLoad()
Alamofire.request(URL_GET_DATA).responseJSON { response in
if let json = response.result.value {
let iconArray : NSArray = json as! NSArray
for i in 0..<iconArray.count{
self.icons.append(Icon(
name: (iconArray[i] as AnyObject).value(forKey: "name") as! String,
imageUrl: (iconArray[i] as AnyObject).value(forKey: "imageUrl") as! String
))
}
self.TableViewOutlet.reloadData()
}
}
self.TableViewOutlet.reloadData()
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return icons.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "one", for: indexPath)as? TableViewCell
let icon: Icon
icon = icons[indexPath.row]
cell?.nameOutlet.text = icon.name
Alamofire.request(icon.imageUrl).responseImage { response in
debugPrint(response)
if let image = response.result.value {
cell?.ImageOutlet.image = image
}
}
return cell!
}
}
我遇到这样的错误
无法将类型'__NSDictionaryI'(0x10a439508)的值强制转换为'NSArray'(0x10a439008)。 2018-09-27 17:42:43.020278 + 0530 TableViewJSON [14887:1123768]无法将类型'__NSDictionaryI'(0x10a439508)的值强制转换为'NSArray'(0x10a439008)。
在第30行,我说错了
线程1:信号SIGABRT
答案 0 :(得分:1)
错误非常明显:json
是字典([String:Any]
),而不是数组。根本不要在Swift中使用NSArray
以及可怕的as AnyObject).value(forKey:
!
并且始终有条件地绑定值以避免崩溃
...
if let json = response.result.value as? [String:Any], // <- Swift Dictionary
let results = json["results"] as? [[String:Any]] { // <- Swift Array
for result in results {
print(result["name"] as! String)
}
JSON中根本没有密钥imageURL