Если вы кодируете с помощью Xcode 10.0+ beta (Swift 4.2 или более поздней версии), вы можете использовать новый метод removeAll(where:)
mutating func removeAll(where predicate: (Element) throws -> Bool) rethrows
Обсуждение: Используйте этот метод для удаления каждого элемента в коллекции.
это соответствует определенным критериям.
Сложность: O (n), где n - длина коллекции.
В этом примере удаляются все лишние
значения из массива чисел:
var numbers = [5, 6, 7, 8, 9, 10, 11]
numbers.removeAll(where: { $0 % 2 == 1 }) // numbers == [6, 8, 10]
В вашем случае убедитесь, что MyCustomObject
соответствует Equatable
objectArray.removeAll(where: { $0 == objectToRemove })
или используйте одно из его свойств, которое соответствует ему в качестве предиката (т. Е. id: Int
):
objectArray.removeAll(where: { $0.id == idToRemove })
Примечание: Если вы не используете Xcode 10.0+ beta (Swift 4.2), вы можете реализовать свой собственный метод removeAll(where:)
, как вы можете видеть в этом ответе .
Реализация removeFirst(where:)
и removeLast(where:)
, чтобы избежать итерации всей Коллекции, как указано в комментариях @ vacawama
Swift 4.1
extension RangeReplaceableCollection {
@discardableResult
mutating func removeFirst(where predicate: (Element) throws -> Bool) rethrows -> Element? {
guard let index = try index(where: predicate) else { return nil }
return remove(at: index)
}
}
extension RangeReplaceableCollection where Self: BidirectionalCollection {
@discardableResult
mutating func removeLast(where predicate: (Element) throws -> Bool) rethrows -> Element? {
guard let index = try indices.reversed().first(where: {
try predicate(self[$0])
}) else { return nil }
return remove(at: index)
}
}
Swift 4.2 или более поздняя версия (в соответствии с предложением @Hamish)
extension RangeReplaceableCollection {
@discardableResult
mutating func removeFirst(where predicate: (Element) throws -> Bool) rethrows -> Element? {
guard let index = try firstIndex(where: predicate) else { return nil }
return remove(at: index)
}
}
extension RangeReplaceableCollection where Self: BidirectionalCollection {
@discardableResult
mutating func removeLast(where predicate: (Element) throws -> Bool) rethrows -> Element? {
guard let index = try lastIndex(where: predicate) else { return nil }
return remove(at: index)
}
}