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

dev*_*os1 15 arrays protocols swift xcode6

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

var observers = [Observing]()

func removeObserver( observer: Observing ) {
    for i in 0 ..< self.observers.count {
        if self.observers[i] == observer { // <='Observing' is not convertible to 'Identifiable'...?
            self.observers.removeAtIndex(i)
            break
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

ahr*_*uss 23

==运营商检查斯威夫特价值的平等,以及有没有为它的默认实现.你想要的是引用相等,你可以得到使用===!==斯威夫特.

有关详细信息,请参阅文档.

身份运营商

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

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

与(===)相同不同于(!==)

请注意,要使===操作员工作,对象必须符合AnyObject协议.您可以通过使用":class"后缀协议来保证这一点,如下所示:

protocol SomeProtocol : class { ... }
Run Code Online (Sandbox Code Playgroud)

  • 在beta5中它应该是`protocol Name:class {...}` (4认同)