有时我会从特定站点获取信息。但是当响应缓慢时,我想添加一个超时功能。我想知道怎么做。
我可以在下面的代码中添加超时功能吗?
html = try String(contentsOf: url, encoding: String.Encoding.ascii)
有时我会从特定站点获取信息。但是当响应缓慢时,我想添加一个超时功能。我想知道怎么做。
我可以在下面的代码中添加超时功能吗?
html = try String(contentsOf: url, encoding: String.Encoding.ascii)
您实际上不应该使用init(contentsOf:encoding:)从远程 URL 读取。这个初始化程序是同步的,所以当它执行时,您的应用程序的 UI 将冻结并且用户将无法执行任何操作,正如您可能已经注意到的那样。
您应该使用URLSession并URLRequest从远程 URL 获取数据。它们是异步的,因此您可以在完成处理程序中获取数据。
您可以在创建时以秒为单位设置超时,如果超时(以及其他原因)URLRequest,您将在完成处理程序中获得一个。NSError
var request = URLRequest(url: URL(string: "https://example.com")!,timeoutInterval: 10)
request.addValue("text/plain", forHTTPHeaderField: "Content-Type")
request.httpMethod = "GET"
let task = URLSession.shared.dataTask(with: request) { data, response, error in
guard let data = data else {
print(String(describing: error))
return
}
let result = String(data: data, encoding: .ascii)
// do something with result
}
task.resume()