我试图Array用以下函数扩展Swift的类:
func containsObjectIdenticalTo(obj: T) -> Bool {
// objectPassingTest returns the first object passing the test
return objectPassingTest { x in x == obj }
}
Run Code Online (Sandbox Code Playgroud)
显然,这不会编译,因为编译器还不知道是否==为类型实现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
}
Run Code Online (Sandbox Code Playgroud)
哪个也不起作用,因为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
}
Run Code Online (Sandbox Code Playgroud)
指定方法签名中的 T 必须相等:
func containsObjectIdenticalTo<T: Equatable>(obj: T) -> Bool {/*...*/}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3850 次 |
| 最近记录: |