如何从Swift中的协议数组中删除元素?

时间:2014-07-26 19:28:21

标签: arrays swift protocols xcode6

Swift的协议实现现在让我疯狂。我在自定义协议observers上定义了一个数组Observing,我试图从给定该元素的数组中删除一个元素,但Swift抱怨Observing没有实现{{ 1}}(我认为它实际上是我自己的另一个协议,除非还有一个称为系统协议的系统协议)。我想要做的就是参考比较并删除实际对象。我不关心对物体进行任何比较。

Identifiable

2 个答案:

答案 0 :(得分:20)

==运算符检查Swift中的值相等性,并且没有默认实现。你想要的是引用相等性,你可以使用Swift中的===!==获得。

有关详细信息,请参阅the documentation

  

身份操作员

     

因为类是引用类型,所以多个常量和变量可以在后台引用同一个类的单个实例。 (对于结构和枚举,情况也是如此,因为它们在分配给常量或变量或传递给函数时总是被复制。)

     

有时候找出两个常量或变量是否完全引用一个类的实例有用。为了实现这一点,Swift提供了两个身份运算符:

     

与(===)相同   与(!==)

不同

请注意,要使===运算符起作用,对象必须符合AnyObject协议。您可以通过使用“:class”后缀协议来保证这一点,如下所示:

protocol SomeProtocol : class { ... }

答案 1 :(得分:3)

如果要比较两个Observing指向同一个实例,请改用===运算符。这要求观察者必须符合AnyObject。要求Observing仅适用于AnyObjects的简单方法是将@class_protocol前缀添加到协议声明中。

相关问题