简答
你可以在数组中找到对象的索引,然后用索引删除它。
var array = [1, 2, 3, 4, 5, 6, 7]
var itemToRemove = 4
if let index = array.index(of: itemToRemove) {
array.remove(at: index)
}
长答案
如果您的数组元素确认为 Hashable 协议,您可以使用
array.index(of: itemToRemove)
因为 Swift 可以通过检查数组元素的 hashValue 来找到索引。
但是如果您的元素不符合 Hashable 协议,或者您不想根据 hashValue 查找索引,那么您应该告诉 index 方法如何找到该项目。所以你使用 index(where: ) 代替它要求你给出一个谓词 clouser 来找到正确的元素
// just a struct which doesn't confirm to Hashable
struct Item {
let value: Int
}
// item that needs to be removed from array
let itemToRemove = Item(value: 4)
// finding index using index(where:) method
if let index = array.index(where: { $0.value == itemToRemove.value }) {
// removing item
array.remove(at: index)
}
如果你在很多地方都使用 index(where:) 方法,你可以定义一个谓词函数并将其传递给 index(where:)
// predicate function for items
func itemPredicate(item: Item) -> Bool {
return item.value == itemToRemove.value
}
if let index = array.index(where: itemPredicate) {
array.remove(at: index)
}
有关更多信息,请阅读 Apple 的开发者文档:
index(where:)
index(of:)