gpt4 book ai didi

swift - 如何使用swiftyJson获取TableView中的arrayvalue?

转载 作者:行者123 更新时间:2023-11-28 07:41:49 28 4
gpt4 key购买 nike

我使用 swiftyJson 来解析数据,但不知道如何解析数组。这是代码。

import UIKit
import Alamofire
import SwiftyJSON

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
var json:JSON = JSON.null
var urlSession = URLSession(configuration: .default)
@IBOutlet weak var myTableView: UITableView!
var pokamon = [[String:AnyObject]]()

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return pokamon.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! TableViewCell
var dict = pokamon[indexPath.row]
cell.nameLbl.text = dict["name"] as? String
cell.typesLbl.text = dict["types"]?[0] as? String
cell.hpLbl.text = dict["hp"] as? String
cell.subtypeLbl.text = dict["subtype"] as? String

if let image = URL(string: dict["imageUrl"] as! String){
let task = urlSession.downloadTask(with: image) { (url, repsponse, error) in
if error != nil{
print("sorry")
return
}
if let okURL = url{
do{
let downloadImage = UIImage(data: try Data(contentsOf: okURL))
DispatchQueue.main.async {
cell.myImage.image = downloadImage
}
}catch{
print("error")
}
}
}
task.resume()
}
return cell
}

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 224
}

override func viewDidLoad() {
super.viewDidLoad()
myTableView.delegate = self
myTableView.dataSource = self

Alamofire.request("https://api.pokemontcg.io/v1/cards").responseJSON(completionHandler: { response in

if response.result.isSuccess {

let json:JSON = try! JSON(data: response.data!)
let swiftyJsonVar = JSON(response.result.value!)
if let resData = swiftyJsonVar["cards"].arrayObject{
self.pokamon = resData as! [[String:AnyObject]]
}
if self.pokamon.count > 0{
self.myTableView.reloadData()
}
} else {
print("error: \(response.error)")
}
})
}
}

在 tableView 的 cellForRowAt 中,它显示“下标的使用不明确”,代码如下,不知道如何解决。其余的像“name”、“hp”、“subtype”都没有问题!

cell.typesLbl.text = dict["types"]?[0] as? String

谁能帮我解决这个错误?谢谢!

最佳答案

编译器必须知道任何下标对象的类型。告诉编译器您需要一个字符串数组。

cell.typesLbl.text = (dict["types"] as? [String])?.first

在 Swift 3+ 中,所有 JSON 值都是 Any 而不是 AnyObject 所以声明数组

var pokamon = [[String:Any]]()

关于swift - 如何使用swiftyJson获取TableView中的arrayvalue?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52033809/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com