dataTask展开一个可选值时意外找到nil

问题描述 投票:0回答:1

我正在构建仅使用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(数据,响应,错误)?

swift web-services
1个回答
0
投票

需要完成处理程序,但是在创建数据任务对象时不必指定完成处理程序。在这种情况下,您必须定义一个URLSessionDataDelegate来处理响应。

“ URLSession对象不需要委托。如果未分配委托,则在该会话中创建任务时,必须提供完成处理程序块以获取数据。

完成处理程序块主要旨在替代使用自定义委托。如果您使用带有完成处理程序块的方法创建任务,则不会调用用于响应和数据传递的委托方法。”(https://developer.apple.com/documentation/foundation/urlsessiondatadelegate)。

关于崩溃,它似乎与声明任务时使用的展开力(!符号)有关。如果发生此错误,则可以使用保护条件来安全终止。

guard let url = URL(string: endPoint) else { return }

URLSession.shared.dataTask(with: url) {_, _, _ in
}.resume() 
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.