У меня есть эта рекурсивная функция, которая ждет, пока изображение не будет загружено. Однако он не работает должным образом. UIImageView никогда не обновляется.Swift: использование ссылочных типов с GCD
(Параметр изображения представляет собой поле типа класса, и загружается с помощью Alamofire)
Поскольку UIImage является ссылочным типом, что это ошибка?
func waitForImage(image: UIImage?, imageName: String, imageView: UIImageView, waitTimeInSec: Double = 0.5, repeatCount: Int = 0) {
let maxWaits = 10
if image != nil {
imageView.image = image
}
else {
if repeatCount > maxWaits {
return
}
delay(waitTimeInSec) {
self.waitForImage(image, imageName: imageName, imageView: imageView,
waitTimeInSec: waitTimeInSec, repeatCount: repeatCount + 1)
}
}
}
Где задержка определяется как:
func delay(delay:Double, closure:()->()) {
dispatch_after(
dispatch_time(
DISPATCH_TIME_NOW,
Int64(delay * Double(NSEC_PER_SEC))
),
dispatch_get_main_queue(), closure)
}
Вот как я вызываю функцию:
waitForImage(item.owner.picture, imageName: "Owner's Avatar, \(item.owner.ID)", imageView: ivAvatar)
Где 'image' должен взялось? – jtbandes
@jtbandes Это поле класса. Я добавил образец вызова, чтобы сделать его более понятным. –
Что вы пытаетесь достичь этой функцией? Может быть, есть более чистые способы, как использование таймера? –