我正在快速从数组中删除项目,但不确定为什么会出现此错误。
我的代码是:
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
}
}
答案 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
}
}
当然,确切的行为应取决于您的用例。