如何对两个对象数组使用 "contains"
How to use "contains" with two arrays of objects
我有class个产品
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 只是字符串数组时,它工作正常,但现在我需要对象。
关于错误:首先是 "could not find an overload for "!" 接受提供的参数。删除感叹号后它是"无法调用包含类型为 '(@lvalue[Products,$T8) '
要使 contains()
功能正常工作,Products
class 应该实施 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
}
我有class个产品
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 只是字符串数组时,它工作正常,但现在我需要对象。
关于错误:首先是 "could not find an overload for "!" 接受提供的参数。删除感叹号后它是"无法调用包含类型为 '(@lvalue[Products,$T8) '
要使 contains()
功能正常工作,Products
class 应该实施 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
}