我是快速編程的新手,我正在按照教程進行練習。在本教程中,有一部分是我需要使用 youtube API 來顯示與我正在發送的查詢相關的視頻(例如“哈利波特”)。這是代碼:
func getMovie(with query: String, completion: @escaping (VideoElement) -> Void) {
guard let query = query.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed) else { return }
guard let url = URL(string: "\(Constants.Youtube_Base_URL)q=\(query)&key=\(Constants.Youtube_API_KEY)") else { return }
let task = URLSession.shared.dataTask(with: URLRequest(url: url)) { data, _, error in
guard let data = data, error == nil else { return }
do {
let results = try JSONDecoder().decode(YoutubeSearchResponse.self, from: data)
print(results)
}
catch {
print(error)
}
}
task.resume()
}
這是我用來存盤所有資料的 ViewModel
import Foundation
struct YoutubeSearchResponse: Codable {
let items: [VideoElement]
}
struct VideoElement: Codable {
let kind: String
let etag: String
let id: IdVideoElement
}
struct IdVideoElement: Codable {
let kind: String
let videoId: String
}
我試圖解碼的 JSON 物件看起來像這樣
{
"kind": "youtube#searchListResponse",
"etag": "wFHpGVWdte2UR9vabzgTBGRw5-c",
"nextPageToken": "CAUQAA",
"regionCode": "CO",
"pageInfo": {
"totalResults": 1000000,
"resultsPerPage": 5
},
"items": [
{
"kind": "youtube#searchResult",
"etag": "nn_Ih6r95JKAesBbHpycaDYycYQ",
"id": {
"kind": "youtube#video",
"videoId": "H5v3kku4y6Q"
}
},
{
"kind": "youtube#searchResult",
"etag": "g7MBprSF3MjksecVRh0Up_Dcxcg",
"id": {
"kind": "youtube#video",
"videoId": "bt_pJG3YZpc"
}
}
]
}
主要問題是,我收到此錯誤:
keyNotFound(CodingKeys(stringValue: "videoId", intValue: nil), Swift.DecodingError.Context(codingPath: [CodingKeys(stringValue: "items", intValue: nil), _JSONKey(stringValue: "Index 1", intValue: 1) , CodingKeys(stringValue: "id", intValue: nil)], debugDescription: "No value associated with key CodingKeys(stringValue: "videoId", intValue: nil) ("videoId").", underlyingError: nil))
我不知道為什么。我想知道是什么導致了這個錯誤,我可以修復它嗎
uj5u.com熱心網友回復:
只需將您的 videoID 設定為可選,問題就會消失
struct IdVideoElement: Codable {
let kind: String
let videoId: String?
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/517745.html
