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

Pab*_*blo 1 swift

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

private var positiveEvents : [Event] = []
Run Code Online (Sandbox Code Playgroud)

现在,这是我如何尝试从数组中删除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!")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述

有没有更好的方法呢?

Dan*_*yev 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!")
    }
  }
}
Run Code Online (Sandbox Code Playgroud)