我们可以测试符合相同协议的对象在swift中是否完全相同而不进行
发布时间:2020-12-14 05:46:52 所属栏目:百科 来源:网络整理
导读:我试图测试从工厂生成的两个对象是否相同,但编译器似乎不允许对仅符合相同协议的对象进行身份检查.然而,将这两个对象转换为AnyObject似乎很好.反正有没有避免看似不必要的铸造? 这是一个简单的例子,演示了我所看到的内容(在swift 1.2中) protocol FooBar {}
我试图测试从工厂生成的两个对象是否相同,但编译器似乎不允许对仅符合相同协议的对象进行身份检查.然而,将这两个对象转换为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! { ... } 编译并按预期工作,因为编译器“知道”它两个操作数都是对类实例的引用. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |