我正在构建仅使用Web服务的应用程序。为此,我使用了dataTask(URLSession.shared.dataTask)方法。
我不等待信息,仅使用下一个代码触发一个过程:
let endPoint = "http://host/service
let url = URL(string: endPoint)
let task = URLSession.shared.dataTask(with: url!) {_, _, _ in
}
task.resume()
当执行dataTask方法时,Xcode向我显示错误:“线程1:致命错误:在展开可选值时意外发现nil”
是否可以跳过返回的completionHandler(数据,响应,错误)?
需要完成处理程序,但是在创建数据任务对象时不必指定完成处理程序。在这种情况下,您必须定义一个URLSessionDataDelegate来处理响应。
“ URLSession对象不需要委托。如果未分配委托,则在该会话中创建任务时,必须提供完成处理程序块以获取数据。
完成处理程序块主要旨在替代使用自定义委托。如果您使用带有完成处理程序块的方法创建任务,则不会调用用于响应和数据传递的委托方法。”(https://developer.apple.com/documentation/foundation/urlsessiondatadelegate)。
关于崩溃,它似乎与声明任务时使用的展开力(!符号)有关。如果发生此错误,则可以使用保护条件来安全终止。
guard let url = URL(string: endPoint) else { return }
URLSession.shared.dataTask(with: url) {_, _, _ in
}.resume()