Swift的协议实现现在让我疯狂。我在自定义协议observers
上定义了一个数组Observing
,我试图从给定该元素的数组中删除一个元素,但Swift抱怨Observing
没有实现{{ 1}}(我认为它实际上是我自己的另一个协议,除非还有一个称为系统协议的系统协议)。我想要做的就是参考比较并删除实际对象。我不关心对物体进行任何比较。
Identifiable
答案 0 :(得分:20)
==
运算符检查Swift中的值相等性,并且没有默认实现。你想要的是引用相等性,你可以使用Swift中的===
和!==
获得。
有关详细信息,请参阅the documentation。
身份操作员
因为类是引用类型,所以多个常量和变量可以在后台引用同一个类的单个实例。 (对于结构和枚举,情况也是如此,因为它们在分配给常量或变量或传递给函数时总是被复制。)
有时候找出两个常量或变量是否完全引用一个类的实例有用。为了实现这一点,Swift提供了两个身份运算符:
与(===)相同 与(!==)
不同
请注意,要使===
运算符起作用,对象必须符合AnyObject
协议。您可以通过使用“:class”后缀协议来保证这一点,如下所示:
protocol SomeProtocol : class { ... }
答案 1 :(得分:3)
如果要比较两个Observing指向同一个实例,请改用===运算符。这要求观察者必须符合AnyObject。要求Observing仅适用于AnyObjects的简单方法是将@class_protocol前缀添加到协议声明中。