【发布时间】:2021-01-11 02:19:59
【问题描述】:
我正在学习本教程,但收到此错误:
上下文闭包类型 '(Data?, URLResponse?, Error?) -> Void' 需要 3 个参数,但在闭包主体中使用了 1 个
在线:urlSession.dataTask(with: url) { (result) in
private func fetchResources<T: Decodable>(url: URL, completion: @escaping (Result<T, APIServiceError>) -> Void) {
guard var urlComponents = URLComponents(url: url, resolvingAgainstBaseURL: true) else {
completion(.failure(.invalidEndpoint))
return
}
let queryItems = [URLQueryItem(name: "api_key", value: apiKey)]
urlComponents.queryItems = queryItems
guard let url = urlComponents.url else {
completion(.failure(.invalidEndpoint))
return
}
urlSession.dataTask(with: url) { (result) in
switch result {
case .success(let (response, data)):
guard let statusCode = (response as? HTTPURLResponse)?.statusCode, 200..<299 ~= statusCode else {
completion(.failure(.invalidResponse))
return
}
do {
let values = try self.jsonDecoder.decode(T.self, from: data)
completion(.success(values))
} catch {
completion(.failure(.decodeError))
}
case .failure(let error):
completion(.failure(.apiError))
}
}.resume()
}
【问题讨论】:
-
@Rob 我修复了 URLSession 预期的参数,但现在错误是 switch 语句上的“在范围内找不到'结果'”
-
这更有意义@Rob 非常感谢!
标签: ios swift closures nsurlsession urlsession