gpt4 book ai didi

ios - 更新数组内结构中的属性

转载 作者:行者123 更新时间:2023-11-28 09:36:39 26 4
gpt4 key购买 nike

在我的应用程序中,我下载了 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] 用于填充表格 View 。

cellForRow 中我有代码... if let searchItem = items[indexPath.row]...

然后检查图像是否为 nil 并下载...

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 中?

最佳答案

使用类。

您将在 cellForRow 方法中获取 searchItem 的副本。无论您对此做什么,都只会对该副本进行。您真正想要的是将对该副本所做的更改应用到数组中的版本。

因此你需要引用语义,因此使用类。

如果您愿意,您可以将更新后的副本重新插入到原始数组中,但是除了一行额外的代码和可能的一些其他问题之外,这对您有什么好处。

关于ios - 更新数组内结构中的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37683548/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com