В моем приложении загружаю загрузку JSON.Обновление свойства в структуре внутри массива
Затем я сохраняю это как массив структур и использую это для заполнения UITableView
.
Одним из свойств структуры является изображение NSURL
. Еще одно свойство - необязательно UIImage
.
Структура имеет мутирующую функцию downloadImage
, которая использует URL-адрес, чтобы загрузить изображение и сохранить его в своей собственности.
Как это ...
struct SearchItem {
// other properties...
let iconURL: NSURL
var icon: UIImage?
mutating func downloadImage() -> Task<UIImage> {
let tsc = TaskCompletionSource<UIImage>()
NSURLSession.sharedSession().downloadTaskWithURL(iconURL) {
(location, response, error) in
if let location = location,
data = NSData(contentsOfURL: location),
image = UIImage(data: data) {
self.icon = image
tsc.setResult(image)
return
}
tsc.setError(NSError(domain: "", code: 1, userInfo: nil))
}.resume()
return tsc.task
}
}
Проблема у меня это. (и я был в тупике от этого в прошлом).
У меня есть массив [SearchItem]
, который я использую для заполнения таблицы.
В cellForRow
У меня есть код ... if let searchItem = items[indexPath.row]...
Затем он проверяет, является ли образ ноль и загрузка ...
if let image = searchItem.icon {
cell.imageView.image = image
} else {
searchItem.downloadImage().continueOnSuccessWith(Executor.MainThread) {
_ in
tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: .None)
}
}
Но это никогда не проходит, чтобы поместить изображение в ячейку , Это связано с тем, что SearchItem
является структурой и поэтому pass-by-value
. Таким образом, элемент поиска, который я загружаю для изображения, не является тем же SearchItem
, что и тот, который хранится в массиве.
Как я могу гарантировать, что загруженное изображение затем сохраняется в SearchItem
внутри фактического массива?
Простые: использование классов: D – jrturton
@jrturton но но ...Разве это не идеальный вариант использования для структур? – Fogmeister
, очевидно, нет, в противном случае это было бы работать – jrturton