我有一个名为 subscribers 的数组,它存储符合 JABPanelChangeSubscriber 协议(protocol)的对象。协议(protocol)声明为
public protocol JABPanelChangeSubscriber {
}
我的数组声明为:
var subscribers = [JABPanelChangeSubscriber]()
现在我需要实现一个方法来将订阅者添加到列表中,但它首先必须检查之前是否尚未添加该订阅者。
public func addSubscriber(subscriber: JABPanelChangeSubscriber) {
if subscribers.find(subscriber) == nil { // This ensures that the subscriber has never been added before
subscribers.append(subscriber)
}
}
不幸的是,JABPanelChangeSubscriber 不是 Equatable,我不知道如何让它 Equatable,所以 find 方法给我一个错误。谁能帮我解决问题或提出不同方法的建议?
谢谢
最佳答案
假设实现协议(protocol)的所有类型都是引用类型 (类),您可以将协议(protocol)声明为“类协议(protocol)”
public protocol JABPanelChangeSubscriber : class {
}
并使用身份运算符 ===
检查数组是否已经
包含指向与给定参数相同的实例的元素:
public func addSubscriber(subscriber: JABPanelChangeSubscriber) {
if !contains(subscribers, { $0 === subscriber } ) {
subscribers.append(subscriber)
}
}
关于arrays - 在 [SomeProtocol] 类型的数组中查找对象的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30344222/