如何修复 Alamofire responseJSON 已弃用警告!!!!以及如何在这里使用responseDecodable

问题描述 投票:0回答:1

我在使用 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)
                
            }
        }
    }

任何有关上述响应可解码的帮助将不胜感激

swift xcode alamofire
1个回答
0
投票

根据您的代码,

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
块中。

© www.soinside.com 2019 - 2024. All rights reserved.