0

有时我会从特定站点获取信息。但是当响应缓慢时,我想添加一个超时功能。我想知道怎么做。

我可以在下面的代码中添加超时功能吗?

html = try String(contentsOf: url, encoding: String.Encoding.ascii)
4

1 回答 1

1

您实际上不应该使用init(contentsOf:encoding:)从远程 URL 读取。这个初始化程序是同步的,所以当它执行时,您的应用程序的 UI 将冻结并且用户将无法执行任何操作,正如您可能已经注意到的那样。

您应该使用URLSessionURLRequest从远程 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()
于 2021-04-03T07:01:36.147 回答