Skip to content

Instantly share code, notes, and snippets.

@madordie
Created December 7, 2018 01:49
Show Gist options
  • Save madordie/632f06f29832b8fa6eb131a8388e9e24 to your computer and use it in GitHub Desktop.
Save madordie/632f06f29832b8fa6eb131a8388e9e24 to your computer and use it in GitHub Desktop.
public extension Array {
/// 通过item删除一个元素 <https://dbgrandi.github.io/removing_items_from_a_swift_array>
///
/// - Parameter equalItem: 遵守 Equatable 协议的item
/// - Returns: 是否删除
@discardableResult
mutating func remove<Element: Equatable>(equalItem: Element) -> Bool {
var isRemoved = false
for i in stride(from: self.count-1, through: 0, by: -1) {
if let element = self[i] as? Element {
if element == equalItem {
self.remove(at: i)
isRemoved = true
}
}
}
return isRemoved
}
/// 自定义删除规则
///
/// - Parameter predicate: 删除规则
/// - Returns: 是否删除
@discardableResult
mutating func removes(where predicate: (Array.Iterator.Element) -> Bool) -> Bool {
var isRemoved = false
for i in stride(from: self.count-1, through: 0, by: -1) {
let element = self[i]
if predicate(element) {
remove(at: i)
isRemoved = true
}
}
return isRemoved
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment