2016-10-14 4 views
-2

У меня есть цикл, который принимает массив imageUrls и делает изображения из них, но он медленный, есть ли способ ускорить его?Как ускорить загрузку изображения swift

Это выглядит следующим образом:

self.urlArray.forEach() { 
    let photoURL = URL(string: $0) 
    guard let url = photoURL else {continue} 
    let data = try? Data(contentsOf: url) 
    guard let dataSafe = data else {continue} 
    let finishedImage = UIImage(data: dataSafe) 
    self.imagesArray.append(finishedImage) 
} 
+0

вы должны использовать sdWebImage постоянно кэшировать эти образы и не называйте задача снова каждый раз, когда ViewController дозвонились –

+0

Также проверьте 'KingFisher' –

+0

@RajanMaheshwari ребята мне просто нужно, чтобы получить массив UIImages быстро никакой необходимости любая из этих библиотек –

ответ

0

Вы можете получить данные в фоновом потоке, а затем обновить UIImageView в главном потоке.

let photoURL = URL(string: $0) 
guard let url = photoURL else {continue} 
DispatchQueue.global(qos: DispatchQoS.QoSClass.userInitiated).async{ 
    //fetch the image data in background 
    let data = try? Data(contentsOf: url) 
    guard let dataSafe = data else {continue} 
    DispatchQueue.main.sync { 
     //get back to main thread 
     let finishedImage = UIImage(data: dataSafe) 
     self.imagesArray.append(finishedImage) 
    } 
} 
+0

OP использует swift 3. Преобразуйте свой код в синтаксис SWIFT 3 –

+0

@RajanMaheshwari Извините, что я разработчик Objective-C, я действительно не могут отличить эти версии Swift. Кроме того, я совсем не менял исходные коды, я просто добавил GCD. Они также изменили синтаксис для GCD? –

+0

Да, синтаксис GCD изменен –

Смежные вопросы