尝试发出网络请求时,出现错误
finished with error [-999] Error Domain=NSURLErrorDomain Code=-999 "cancelled"
如果我使用
URLSession.shared.dataTask
而不是 URLSession.shared.dataTaskPublisher
它将在 IOS 13.3 上运行。这是我的代码:
return URLSession.shared.dataTaskPublisher(for : request).map{ a in
return a.data
}
.decode(type: MyResponse.self, decoder: JSONDecoder())
.receive(on: DispatchQueue.main)
.eraseToAnyPublisher()
此代码适用于 IOS 13.2.3。
最佳答案
你在这里有两个问题:
1. 就像@matt 所说,你的出版商活得不够长。您可以存储 AnyCancellable
以var
为例,或者我喜欢做的(并且似乎是一个 redux 最佳实践)是使用 store(in:)
到 Set<AnyCancellable>
保留它并在对象被释放时自动清理它。
2. 为了启动实际的网络请求,您需要 sink
或 assign
值(value)。
所以,把这些放在一起:
var cancellableSet: Set<AnyCancellable> = []
func getMyResponse() {
URLSession.shared.dataTaskPublisher(for : request).map{ a in
return a.data
}
.decode(type: MyResponse.self, decoder: JSONDecoder())
.receive(on: DispatchQueue.main)
.replaceError(with: MyResponse())
.sink { myResponse in print(myResponse) }
.store(in: &cancellableSet)
}
关于swift - URLSession.shared.dataTaskPublisher 在 IOS 13.3 上不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59279806/