我有一个映射,在该图中,我从数组中添加了一个组件之后,我希望从该数组中删除该特定组件。我尝试了过滤然后删除的方法,但它只能从数组中删除一项。使用完阵列后,我需要删除阵列的每个项目。它是这样的:
private var labelViews: [MapLabelView] = []
private func removeAllLabels() {
guard let mapController = viewModel.mapController,
let currentMap = mapController.currentMap else {
return
}
> labelViews.forEach { view in
> DispatchQueue.main.async {
> mapController.removeComponent(view, on: currentMap)
> self.labelViews.removeAll(where: {$0 == view})
if let index = self.campusLabelViews.firstIndex(of: view)
{self.campusLabelViews.remove(at: index)}//This is what I tried doing, but its only removing the first view and not ones after that.
}
这里是扩展名,通过它可以获取数组中存在的某个视图的所有索引
extension Array where Element: Equatable {
func allIndexes(of element: Element) -> [Int] {
return self.enumerated().filter({ element == $0.element }).map({ $0.offset })
}
}
所以您的代码将成为
let indexs = self.campusLabelViews. allIndexes(of: view) // it return all indexes of that particular view
for index in indexs {
self.campusLabelViews.remove(at: index)
}