我使用SDWebImage从url获取图像并将其分配给类似的数组......
let imgUrl = arrProduct?[indexPath.section].images[indexPath.row].url
let placeholderImage = UIImage(named: "appLogo.jpg")
cell.prdImgView.sd_setImage(with:imgUrl,
placeholderImage:placeholderImage,
options: []) { (image, error, imageCacheType, imageUrl) in
arrayOfSelectedImages.append(image!)
}
现在我只是不想添加这样的数组。相反,在将图像添加到arrayOfSelectedImages
后,我想在didSet
中更新此数组值并清空arrayOfSelectedImages
数组,以便每次数组获取新值时,它都会更新该值didSet
和& arrayOfSelectedImages已清空。所以最后我在didSet中的数组将拥有我需要的所有图像,我可以将这些图像传递给其他视图......我怎样才能实现这个...?
答案 0 :(得分:1)
不完全确定这是否是您想要的,但如果您修改数组,didSet
将触发属于数组的属性,而不仅仅是您分配数组。这是一个例子:
struct A
{
var anArray = [1, 2, 3]
{
didSet
{
print("Hi, there!")
anArray.remove(at: 0)
}
}
}
var a = A()
a.anArray.append(4)
// Prints Hi there!
print(a.anArray)
// prints [2, 3, 4]
答案 1 :(得分:1)
完成任务非常简单。您需要一个有效的条件来比较附加的对象,以及在将数据追加之前应用于的标准,而不是之后。使用didSet
验证附加对象并在不合适时将其删除,设计不良。
如果您的UIImage
个对象未被封装在任何其他对象或结构中以唯一地标识这些对象,并且您没有选择是否应该下载特定图像(这是您可以通过比较基础图像数据来比较两个UIImage
对象。这可以通过获得图像的PNG表示并比较该数据来实现,但现在有一个很好的简单方法。
比较图片
isEqual( :)方法是唯一可靠的方法 确定两个图像是否包含相同的图像数据。图片 您创建的对象可能彼此不同,即使您 使用相同的缓存图像数据初始化它们。唯一的方法 确定它们的相等性是使用isEqual( :)方法,其中 比较实际图像数据。清单1说明了正确的和 不正确的比较图像的方法。
<强> <子> https://developer.apple.com/documentation/uikit/uiimage 子> 强>
<强>用法强>
if !arrayOfSelectedImages.contains(where: { $0.isEqual(image) }) {
arrayOfSelectedImages.append(image)
}