【发布时间】:2020-11-25 17:20:12
【问题描述】:
我是 swift 的新手,目前正在通过一个项目来学习 API,该项目显示来自 rawg.io 的游戏列表,参考网站的 doc。我创建了 GameFeed.swift 和 GameDetail.swift 以从中提取名称、发布日期和评级,并在我的控制台中正常工作。
GameFeed.swift:
struct GameFeed: Codable {
let results:[GameDetail]
}
GameDetail.swift :
struct GameDetail: Codable {
let name:String
let released:String
let rating:Double
}
现在我正在尝试将结果放到一个简单的UIlabel 中,例如来自ViewController.swift 的gameName.text、gameReleased.text 和gameRating.text,因此它将显示在Main.Storyboard 中
我在谷歌上研究了如何通过使用DispatchQueue.main.async 向这些UIlabel 显示它,但是当我声明它时,它收到错误:
“GameFeed”类型的值没有成员“名称”
released 和 rating 也发生了相同的错误消息。这是我的ViewController.Swift:
class ViewController: UIViewController {
@IBOutlet weak var gameName: UILabel!
@IBOutlet weak var gameReleased: UILabel!
@IBOutlet weak var gameRating: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
// Defining API Site
let urlString = "https://api.rawg.io/api/games"
let url = URL(string: urlString)
guard url != nil else {
return
}
// Calling API
let session = URLSession.shared
let dataTask = session.dataTask(with: url!){
(data, response, error) in
if error == nil && data != nil {
let decoder = JSONDecoder()
do {
let gameFeed = try decoder.decode(GameFeed.self, from: data!)
print(gameFeed)
DispatchQueue.main.async {
self.gameName.text = gameFeed.name
self.gameReleased.text = gameFeed.released
self.gameRating.text = gameFeed.rating
}
}
catch {
print("Error Parsing JSON")
}
}
}
dataTask.resume()
}
}
我应该怎么做才能将数据解析为标签?
【问题讨论】: