在Swift 4中从数组中删除特定对象

时间:2018-03-11 23:45:34

标签: swift

我试图从数组保存Event对象中删除特定的Event对象(我自己的类)。这是我对数组的声明。

private var positiveEvents : [Event] = []

现在,我正在尝试从数组中删除Event对象。此方法(disposeOfflineEvents)每30秒调用一次,因此positiveEvents可能包含某些元素或根本没有元素。

func disposeOfflineEvents() {
    for event in positiveEvents {
        if !event.ongoing {
            positiveEvents.remove(at:  positiveEvents.index(where: { $0 === event })!)
            print("! - Disposing of an event!")
        }
    }
}

我看到this问题,但我使用的是Swift 4,所以我没有索引(of:Event)方法。我当前解决方案的问题是,当使用“===”检查对象的相等性时,我偶尔会遇到错误:

enter image description here

有没有更好的方法呢?

1 个答案:

答案 0 :(得分:6)

你应该避免强行解缠,特别是你的情况,因为数组很可能没有满足条件的元素。相反,您可以使用可选绑定(请注意,您可以将for循环与where结合使用):

func disposeOfflineEvents() {
  for event in positiveEvents where !event.ongoing {
    if let index = positiveEvents.index(where: { $0 === event }) {
      positiveEvents.remove(at: index)
      print("! - Disposing of an event!")
    }
  }
}