Нужно ли вам использовать dataTask URLSession (с: URL) внутри метода main () класса Operation? Например:
class Downloader: Operation {
let postDetailsPage: PostDetailsPage
init(_ postDetailsPage: PostDetailsPage) {
self.postDetailsPage = postDetailsPage
}
override func main() {
if isCancelled {
return
}
let url = URL(string: "https://someurl.json")!
NetworkingClient.shared.urlSession.dataTask(with: url) { (jsonData, response, error) in
// work with jsondata
}.resume()
}
}
Если вышеупомянутая операция все равно будет выполняться в фоновой очереди операций, не использование dataTask (с: url) внутри метода main () просто излишне? В учебнике Рэя Вендерлиха по операциям они указывают загрузку данных следующим образом (см. # 5):
class ImageDownloader: Operation {
//1
let photoRecord: PhotoRecord
//2
init(_ photoRecord: PhotoRecord) {
self.photoRecord = photoRecord
}
//3
override func main() {
//4
if isCancelled {
return
}
//5
guard let imageData = try? Data(contentsOf: photoRecord.url) else { return }
//6
if isCancelled {
return
}
//7
if !imageData.isEmpty {
photoRecord.image = UIImage(data:imageData)
photoRecord.state = .downloaded
} else {
photoRecord.state = .failed
photoRecord.image = UIImage(named: "Failed")
}
}
}
, но в документации Apple он указывает никогда использовать Data(contentsOf: url)
для загрузки данных:
Является ли Data(contentsOf: url)
безопасным способом загрузки данных из операции, которая будет выполняться асинхронно на все равно очередь операций (и точно не будет вызываться в одноразовом блоке)?