如何使用"包含"有两个对象数组

时间:2015-01-11 13:04:27

标签: ios arrays swift

我有班级产品

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只是字符串数组时,它工作正常,但现在我需要对象。

关于错误:首先它是"找不到"!"接受提供的参数。删除感叹号后,它是"无法调用包含类型'的参数列表(@lvalue [Products,$ T8]'

1 个答案:

答案 0 :(得分:3)

要使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
}