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

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

概述我试图测试从工厂生成的两个对象是否相同,但编译器似乎不允许对仅符合相同协议的对象进行身份检查.然而,将这两个对象转换为AnyObject似乎很好.反正有没有避免看似不必要的铸造? 这是一个简单的例子,演示了我所看到的内容(在swift 1.2中) protocol FooBar {}class Foo: FooBar {}class Bar { let foo1: Foo 我试图测试从工厂生成的两个对象是否相同,但编译器似乎不允许对仅符合相同协议的对象进行身份检查.然而,将这两个对象转换为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! { ... }

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

总结

以上是内存溢出为你收集整理的我们可以测试符合相同协议的对象在swift中是否完全相同而不进行转换?全部内容,希望文章能够帮你解决我们可以测试符合相同协议的对象在swift中是否完全相同而不进行转换?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1050250.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存