我有一个VC,在其中仅获取对象数组中第一个对象的数据。因此,我只提取arrayOfObjects[0]
,然后在输入第二个VC时需要提取与同一数组中其他对象关联的所有其他数据。但是后来我遇到了一个问题,我最终要再次获取已经拥有的第一部分数据。所以我的数组看起来像data1, data1, data2, data3 ...
,这当然不是我想要的。
当前,我试图解决此问题的方法是执行以下操作:MainObject?.arrayOfSubObjects.remove(at: 0)
,但这意味着一开始它运行良好,但是每次我回到上一个VC,然后再返回我减去我想在那里的对象之一。所以我最终得到:data2, data3 ...
所以我的问题是如何从一开始就删除该多余的对象,但是在删除后不删除任何东西?
我尝试过的一些事情:
if selectedPost?.media[0].videoURL != nil {
if selectedPost?.media[0].videoURL == selectedPost?.media[1].videoURL {
selectedPost?.media.remove(at: 0)
} else {
print("NO!!!!!! they are not the same ")
}
} else if selectedPost?.media[0].image != nil {
if selectedPost?.media[0].image == selectedPost?.media[1].image {
selectedPost?.media.remove(at: 0)
} else {
print("NO!!! they are not the same ")
}
}
但是这什么也没做,总是以其他方式结束。我也尝试过设置数字方案之类的事情,但这失败了,因为VC一直在重新加载
答案 0 :(得分:0)
您可以尝试这样做:
guard let selectedPost = selectedPost else { return }
if selectedPost.media.contains(where: {$0.image == image}) { return } // Here the $0.image should be replaced with $0.mediaURL == mediaURL for the videos or however you videoURL is called in Media
selectedPost.media.append(Media(image: image, timeStamp: Double(timeStamp)))
self.tableView.reloadData()
尝试在您的Hashable
类中符合Media
:
class Media : Hashable {
var hashValue : Int {
return image.hashValue
}
var image = UIImage()
// .....
static func == (lhs: Media, rhs: Media) -> Bool {
return lhs.hashValue == rhs.hashValue
}
}
然后,您可以将两个媒体对象与==
进行比较,因此您可以执行类似于此答案顶部的操作。祝你好运