[尝试发出网络请求时,出现错误
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上有效。
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)
}
class ViewController: UIViewController {
let url = URL(string:"https://apeth.com/pep/manny.jpg")!
lazy var pub = URLSession.shared.dataTaskPublisher(for: url)
.compactMap {UIImage(data: $0.data)}
.receive(on: DispatchQueue.main)
var sub : AnyCancellable?
override func viewDidLoad() {
super.viewDidLoad()
let sub = pub.sink(receiveCompletion: {_ in}, receiveValue: {print($0)})
self.sub = sub
}
}
将显示<UIImage:0x6000008ba490 anonymous {180, 206}>
,这是正确的(如您自己转到该URL所见)。
[我要说的是,如果您不说self.sub = sub
,您将完全得到所报告的错误:订户sub
仅是本地用户,将立即不复存在,并且网络事务被过早取消(有您报告的错误)。