我们可以测试符合相同协议的对象在swift中是否完全相同而不进行转换?

我试图测试从工厂生成的两个对象是否相同,但编译器似乎不允许对仅符合相同协议的对象进行身份检查.然而,将这两个对象转换为AnyObject似乎很好.反正有没有避免看似不必要的铸造?

这是一个简单的例子,演示了我所看到的内容(在swift 1.2中)

protocol FooBar {

}

class Foo: FooBar   {

}

class Bar {

  let foo1: FooBar?
  let foo2: FooBar?

  init() {
    foo1 = Foo()
    foo2 = Foo()
    if foo1! as? AnyObject === foo2! as? AnyObject {  // this is fine

    }

    if foo1! === foo2!  {  // Birnary operator '===' cannot be applied to two FooBar operands

    }
  }

}
身份运算符===只能应用于引用,即类的实例.
如果符合FooBar协议的所有类型都是类
你可以把它声明为“类协议”

protocol FooBar : class { }

然后

if foo1! === foo2! { ... }

编译并按预期工作,因为编译器“知道”它
两个操作数都是对类实例的引用.

https://stackoverflow.com/questions/32038750/can-we-test-if-objects-conforming-to-the-same-protocol-are-identical-in-swift-wi

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:我们可以测试符合相同协议的对象在swift中是否完全相同而不进行转换?