Rocket.Chat.ReactNative/ios/RocketChat Watch App/Loaders/ImageLoader.swift

34 lines
600 B
Swift

import Combine
import Foundation
import UIKit
final class ImageLoader: ObservableObject {
@Dependency private var client: RocketChatClientProtocol
@Published private(set) var image: UIImage?
private var cancellable: AnyCancellable?
private let url: URL
init(url: URL) {
self.url = url
}
deinit {
cancel()
}
func load() {
cancellable = client.session.dataTaskPublisher(for: url)
.map { UIImage(data: $0.data) }
.replaceError(with: nil)
.receive(on: DispatchQueue.main)
.sink { [weak self] in self?.image = $0 }
}
func cancel() {
cancellable?.cancel()
}
}