我尝试编写一个数组扩展,允许我从数组中删除项目(如果它们存在于另一个数组中)。我需要将它用于一系列自定义类型,因此尝试构建通用的东西。
这是我到目前为止返回错误"二元运算符==不能应用于两个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
}
}
答案 0 :(得分:3)
等于运算符==
仅适用于Equatable
的对象。您需要将类型T
限定为T:Equatable
。就这样:
mutating func removeObject<T:Equatable>(object: T) -> Bool {
// ...
}
与removeArrayItems
请注意,如果您要定义自己的类型,例如class
或struct
,则您的类型也需要符合Equatable
。像这样:
class Foo : Equatable {
// ...
}
public func ==<T:Foo> (lhs:T, rhs:T) -> Bool {
// ...
}