gpt4 book ai didi

ios - 如何表示 nil Error Swift 完成 block

转载 作者:行者123 更新时间:2023-11-30 11:37:51 24 4
gpt4 key购买 nike

嗨,我有一个 swift 中的 Web 服务工作对象,它将完成 block 传递给调用者 View Controller 。代码如下:

func getFlightData(for airportCode: String, minutesBehind:String, minutesAhead:String, completion: (([Flight], NSError) -> Void)?) {
var urlComponents = URLComponents()
urlComponents.scheme = "https"
urlComponents.host = "xxxxxxx.com"
urlComponents.path = "/1/airports/"+airportCode+"/flights/flightInfo"
urlComponents.queryItems = [
URLQueryItem(name: "city", value: airportCode),
URLQueryItem(name: "minutesBehind", value: minutesBehind),
URLQueryItem(name: "minutesAhead", value: minutesAhead)

]

guard let url = urlComponents.url else { fatalError("Could not create URL from components") }
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("xxxxxxxxx", forHTTPHeaderField: "Authorization")
let config = URLSessionConfiguration.default
let session = URLSession(configuration: config)


let task = session.dataTask(with: request) { (responseData, response, responseError) in
DispatchQueue.main.async {


if let error = responseError {

//completion block???


}

else if let jsonData = responseData {

let decoder = JSONDecoder()

do {
let posts = try decoder.decode([Flight].self, from: jsonData)
//completion?(posts, nil) ???? what to pass for Error? Successful call
} catch {
self.showError()

}
}

else {
//completion block???
self.showError()
}
}
}
task.resume()
}

调用成功时,我在完成 block 中传递什么值错误参数。我不能通过 nil,因为 swift 不允许我这样做。有人可以建议一种更好的方法来进行此 API 调用吗?如何发送完成 block 等

最佳答案

将完成 block 声明为采用 Error? 而不是 NSError,然后您将能够将 nil 传递给它成功案例。 ? 使参数成为可选参数,这使得它可以包含 nil。 (另外,使用 Error 而不是 NSError,因为它是惯用的 Swift 错误类型)。

或者,您可以让完成 block 采用 Result 枚举,您可以如下定义:

public enum Result<T> {
case success(T)
case error(Error)

public func unwrap() throws -> T {
switch self {
case let .success(ret):
return ret
case let .error(error):
throw error
}
}
}

然后,您可以使用 .success.error 情况,具体取决于操作是成功还是失败。

关于ios - 如何表示 nil Error Swift 完成 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49544455/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com