我正在尝试扩展 Swift 的 Array
具有以下功能的类:
func containsObjectIdenticalTo(obj: T) -> Bool {
// objectPassingTest returns the first object passing the test
return objectPassingTest { x in x == obj }
}
显然,这不会编译,因为编译器还不知道 ==
是否存在。为 T
类型实现.然后我将代码更改为这个
func containsObjectIdenticalTo(obj: T) -> Bool {
return objectPassingTest {
x in
assert(x is Equatable && obj is Equatable)
return (x as Equatable) == (obj as Equatable)
} != nil
}
这也不起作用,因为符合 Equatable
无法检查(因为 Equatable
没有用 @obj
定义)!
对此有什么想法吗?如果 T
有某种方法可以直接断言,那就太好了符合 Equatable
,但我没有在任何地方读过。在这些方面,Swift 似乎不如 Obj-C 动态。
更新:
尝试了这个建议,但它不起作用(不知道 <T: Equatable>
的确切用途,但它确实可以编译)。
func containsObjectIdenticalTo<T: Equatable>(obj: T) -> Bool {
var x = self[0]
var y = self[0]
return x == y // Error here
}
最佳答案
在方法的签名中指定 T 必须是相等的:
func containsObjectIdenticalTo<T: Equatable>(obj: T) -> Bool {/*...*/}
关于ios - Swift 的 equatable 协议(protocol)一致性检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24174697/