假设我们有类Foo:Swift虚拟运营商?
class Foo {
// some variables
}
,我们有Foo类==操作符:
func ==(left: Foo, right: Foo) -> Bool {
return left.X == right.X && left.Y == right.Y && etc.
}
然后我们要在一些通用的功能
class func mergeUnique<T: Equatable>(workaround: T) -> ((data: [T], newData: [T]) -> [T]) {
return { (data: [T], newData: [T]) in
var res = data
for newElem in newData {
var duplicate = false
for oldElem in res {
if oldElem == newElem {
duplicate = true
break
}
}
if !duplicate {
res.append(newElem)
}
}
return res
}
}
使用它问题是==运算符实际上是一个全局范围函数,而不是类方法(因为我们可以在C++中完成它),所以当函数接收到Equatable对象时,它使用E的==运算符quatable协议,而不是== Foo类的==操作符。在这种情况下,我需要类似虚拟行为的东西。有任何想法吗?
你有没有试着让你的班级平衡:Foo类:Equatable? – Greg