我在使用 Alamofire 的 Xcode 上收到以下警告
'responseJSON(队列:dataPreprocessor:emptyResponseCodes:emptyRequestMethods:选项:completionHandler :)' 已弃用:responseJSON 已弃用,并将在 Alamofire 6. 使用responseDecodable 代替。
这是代码:此代码可以工作,但会发出上述警告。
let URL = "https://www.googleapis.com/youtube/v3/videos?id=\(videoId)&part=contentDetails&key=\(apiKey)"
var duration = String()
AF.request(URL).responseJSON { response in
if let result = response.value as? [String : Any],
let main = result["items"] as? [[String : Any]]{
for obj in main{
duration = (obj as NSDictionary).value(forKeyPath:"contentDetails.duration") as! String
completionHandler(duration, nil)
}
}
}
任何有关上述响应可解码的帮助将不胜感激
根据您的代码,
Codable
结构是
struct YouTube: Decodable {
let items: [Video]
}
struct Video: Decodable {
let contentDetails: Detail
}
struct Detail: Decodable {
let duration: String
}
现在强烈建议使用 Alamofire 的
async/await
API,而不是多次调用完成处理程序,只需返回一个字符串数组
func loadDurations() async throws -> [String] {
let url = "https://www.googleapis.com/youtube/v3/videos?id=\(videoId)&part=contentDetails&key=\(apiKey)"
let response = try await AF.request(url).validate().serializingDecodable(YouTube.self).value
return response.items.map(\.contentDetails.duration)
}
您必须将函数调用包装在
Task
和 do - catch
块中。