Swift 背景URLSession+;结合
尝试使用Swift 背景URLSession+;结合,swift,combine,Swift,Combine,尝试使用URLSession的dataTaskPublisher方法发送后台请求时: URLSession(配置:URLSessionConfiguration.background(带标识符:“示例”)) .dataTaskPublisher(用于:URL(字符串):https://google.com")!) .map(\.data) .sink(接收完成:{print($0)}{print($0)} 我收到了错误 Completion handler blocks are not su
URLSession
的dataTaskPublisher
方法发送后台请求时:
URLSession(配置:URLSessionConfiguration.background(带标识符:“示例”))
.dataTaskPublisher(用于:URL(字符串):https://google.com")!)
.map(\.data)
.sink(接收完成:{print($0)}{print($0)}
我收到了错误
Completion handler blocks are not supported in background sessions. Use a delegate instead.
这对我来说很有意义,sink
是一组完成处理程序。因此,我尝试建立一个订户:
类示例订阅者:订阅者{
typealias输入=数据
typealias Failure=URLError
func接收(订阅:订阅){
订阅请求(.max(1))
}
func-receive(uu-input:Data)->Subscribers.Demand{
打印(输入)
return.Demand.none
}
func receive(完成:Subscribers.completion){}
}
并使用订阅者订阅
:
URLSession(配置:URLSessionConfiguration.background(带标识符:“示例”))
.dataTaskPublisher(用于:URL(字符串):https://google.com")!)
.map(\.data)
.subscribe(例如subscriber())
我收到了同样的错误:
Completion handler blocks are not supported in background sessions. Use a delegate instead.
是否可以使用dataTaskPublisher
执行后台请求,或者我必须使用对URLSession
的委托?URLSession。dataTaskPublisher
构建在URLSessionDataTask
之上,并在任务上设置完成处理程序。因此,您不能将DataTaskPublisher
用于后台会话
您可以找到DataTaskPublisher
的源代码。以下是:
这可能会有帮助:@NewDev是的,我知道在使用saydataTask
时,不能同时使用完成处理程序和后台会话。我特别想问的是,是否可以使用Combine和后台会话。特别是在添加特定的订户时,它似乎类似于委托。但我明白这可能是不可能的。你不能在后台会话中使用DataTaskPublisher
,因为它在后台使用完成处理程序。显然,您可以创建自己的使用委托实现的应用程序,但后台会话的整个思想是,这些请求不仅能够在应用程序挂起后存活,而且能够在应用程序生命周期的自然过程中被丢弃。所以,当请求完成时,操作系统会启动你们的应用程序,在应用程序挂起之前创建的完成块和合并发布程序都不存在了。因此,将其与后台会话结合使用是没有意义的。
let task = p.session.dataTask(
with: p.request,
completionHandler: handleResponse(data:response:error:)
)