У URLSessionDataTask нет члена 'map' Swift 5 - PullRequest
1 голос
/ 15 февраля 2020

Здравствуйте, это ошибка, я не знаю, как исправить. из этого урока:

Многоразовый кэш изображений в Swift

5 Код:

final class ImageLoader {

private let cache = ImageCache()

func loadImage(from url: URL) -> AnyPublisher<UIImage?, Never> {
    if let image = cache[url] {
        return Just(image).eraseToAnyPublisher()
    }
    return URLSession.shared.dataTask(with: url)
        .map { (data, response) -> UIImage? in return UIImage(data: data) }
        .catch { error in return Just(nil) }
        .handleEvents(receiveOutput: {[unowned self] image in
            guard let image = image else { return }
            self.cache[url] = image
        })
        .subscribe(on: .background)
        .receive(on: RunLoop.main)
        .eraseToAnyPublisher()
}
}

Обновление:

Если вы используете dataTaskPublisher: enter image description here

1 Ответ

1 голос
/ 15 февраля 2020

Вы должны использовать dataTaskPublisher для этой цели, а не dataTask сам

final class ImageLoader {

    private let cache = ImageCache()

    func loadImage(from url: URL) -> AnyPublisher<UIImage?, Never> {
        if let image = cache[url] {
            return Just(image).eraseToAnyPublisher()
        }
        return URLSession.shared.dataTaskPublisher(for: url)
            .map { UIImage(data: $0.data) }
            .catch { error in return Just(nil) }
            .handleEvents(receiveOutput: {[unowned self] image in
                guard let image = image else { return }
                self.cache[url] = image
            })
            .subscribe(on: DispatchQueue.global(qos: .background))
            .receive(on: RunLoop.main)
            .eraseToAnyPublisher()
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...