调用中的额外参数“ where”

时间:2019-06-29 08:42:13

标签: swift xcode

我正在快速从数组中删除项目,但不确定为什么会出现此错误。

我的代码是:

var itemToRemove = list[indexPath.item]
selectedCasesArray.removeAll(where: { $0 == itemToRemove })

CollectionView的didSelect函数中包含代码。

itemToRemove的类型为CaseFormat,而selectedCaseArray的类型为[CaseFormat]

为什么这行不通? Apple的文档允许在Swift 4.2+中使用它,而我使用的是Swift 5


我被要求显示如何声明CaseFormat

class CaseFormat {

var id : Int
var imageName : String
var isSelected : Bool
var solve : String
var testTicks : Int

init(id : Int, imageName : String, isSelected : Bool, solve : String, testTicks : Int) {
    self.id = id
    self.imageName = imageName
    self.isSelected = isSelected
    self.solve = solve
    self.testTicks = testTicks
}

}

1 个答案:

答案 0 :(得分:0)

由于CaseFormat不是Equatable,因此不能将==与它一起使用。

这是一门课程,所以也许您想直接使用===比较引用?

selectedCasesArray.removeAll(where: { $0 === itemToRemove })

如果您想真正使用==,则必须实现Equatable,例如:

extension CaseFormat: Equatable {
    public static func == (lhs: CaseFormat, rhs: CaseFormat) -> Bool {
        return lhs.id == rhs.id
    }
}

当然,确切的行为应取决于您的用例。