- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
Swift 的协议(protocol)实现现在真的让我抓狂。我有一个数组 observers
通过自定义协议(protocol) Observing
定义,我试图从给定元素的数组中删除一个元素,但 Swift 提示 Observing
没有实现 Identifiable
(我认为这实际上是我自己的另一个协议(protocol),除非还有一个系统协议(protocol)叫它)。我只想做一个引用比较并删除实际对象。我不关心对对象执行任何类型的比较。
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
}
}
}
最佳答案
==
运算符检查 Swift 中的值是否相等,并且没有默认实现。你想要的是引用相等性,你可以在 Swift 中使用 ===
和 !==
来获得。
参见 the documentation了解更多详情。
Identity Operators
Because classes are reference types, it is possible for multiple constants and variables to refer to the same single instance of a class behind the scenes. (The same is not true for structures and enumerations, because they are always copied when they are assigned to a constant or variable, or passed to a function.)
It can sometimes be useful to find out if two constants or variables refer to exactly the same instance of a class. To enable this, Swift provides two identity operators:
Identical to (===) Not identical to (!==)
请注意,要使 ===
运算符起作用,对象必须符合 AnyObject
协议(protocol)。您可以通过在协议(protocol)后缀“:class”来保证这一点,如下所示:
protocol SomeProtocol : class { ... }
关于arrays - 如何从 Swift 中的协议(protocol)数组中删除一个元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24974766/
我是一名优秀的程序员,十分优秀!