从数组中删除数组项

时间:2015-05-21 13:47:07

标签: arrays swift generics

我尝试编写一个数组扩展,允许我从数组中删除项目(如果它们存在于另一个数组中)。我需要将它用于一系列自定义类型,因此尝试构建通用的东西。

这是我到目前为止返回错误"二元运算符==不能应用于两个t操作数"

extension Array{


    mutating func removeArrayItems<T>(itemsToRemove: [T]){

        for item in itemsToRemove{
            var removed = removeObject(item)
        }
    }


    mutating func removeObject<T>(object: T) -> Bool {
        for (idx, objectToCompare) in enumerate(self) {
            if let to = objectToCompare as? T {
                if object == to {
                    self.removeAtIndex(idx)
                    return true
                }
            }
        }
        return false
    }

}

1 个答案:

答案 0 :(得分:3)

等于运算符==仅适用于Equatable的对象。您需要将类型T限定为T:Equatable。就这样:

mutating func removeObject<T:Equatable>(object: T) -> Bool {
  // ...
}

removeArrayItems

相同

请注意,如果您要定义自己的类型,例如classstruct,则您的类型也需要符合Equatable。像这样:

class Foo : Equatable {
  // ...
}

public func ==<T:Foo> (lhs:T, rhs:T) -> Bool {
  // ...
}