如何使用“包含”两个对象数组

我有类产品

class Products { var name:String = "" var number:Int = 0 init(name: String, number: Int) { self.name = name self.number = number } } 

然后在视图控制器

 var productFirst:[Products] = [Products(name: "First", number: 1)] var productSecond:[Products] = [Products]() 

我使用productFirst来填充tableView。

我想添加选定的行到productSecond,它的工作原理:

 productSecond.append(productFirst[indexPath.row]) 

但我不想在数组中重复项目,所以我做了

 if !contains(productSecond, productFirst[indexPath.row]) { productSecond.append(productFirst[indexPath.row]) } 

我得到错误。 如何改变它? 当productFirst和productSeconds只是string数组,它的工作正常,但现在我需要的对象。

关于错误:首先是“无法find接受提供参数的”!“的重载。删除感叹号后,它是”无法用types的参数列表调用包含“(@lvalue [Products,$ T8)'

对于contains()函数来说, Products类应该实现Equatable协议。 只有这样我们才能检查两个元素是否相等。

 class Products : Equatable { var name:String = "" var number:Int = 0 init(name: String, number: Int) { self.name = name self.number = number } } func ==(lhs: Products, rhs: Products) -> Bool { return lhs.name == rhs.name && lhs.number == rhs.number }