URLSession.shared.dataTask与dataTaskPublisher,什么时候使用?

问题描述

我最近遇到了两个数据获取(下载)API,它们对我来说似乎执行相同的操作。我看不到何时应该使用另一个。

我可以使用URLSession.shared.dataTask

    var tasks: [URLSessionDataTask] = []

    func loadItems(tuple : (name : String,imageURL : URL)) {
        let task = URLSession.shared.dataTask(with: tuple.imageURL,completionHandler :
        { data,response,error in
            guard let data = data,error == nil else { return }
            DispatchQueue.main.async() { [weak self] in
                self?.displayFlag(data: data,title: tuple.name)
            }
        })
        tasks.append(task)
        task.resume()
    }

    deinit {
        tasks.forEach {
            $0.cancel()
        }
    }

或者我可以使用URLSession.shared.dataTaskPublisher

    var cancellables: [AnyCancellable] = []

    func loadItems(tuple : (name : String,imageURL : URL)) {
        URLSession.shared.dataTaskPublisher(for: tuple.imageURL)
            .sink(
                receiveCompletion: {
                    completion in
                    switch completion {
                    case .finished:
                        break
                    case .failure( _):
                        return
                    }},receiveValue: { data,_ in DispatchQueue.main.async { [weak self] in self?.displayFlag(data: data,title: tuple.name) } })
            .store(in: &cancellables)
    }

    deinit {
        cancellables.forEach {
            $0.cancel()
        }
    }

我看不到它们的明显区别,因为两者都可以获取,并且都为我们提供了轻松取消任务的能力。有人可以阐明他们在何时使用哪种方面的差异吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)