Swift:二元运算符'=='不能应用于“协议”类型的操作数

时间:2015-12-17 02:39:18

标签: swift protocols

我有一个协议:

protocol ProfileManagerDelegete {
func dataHaveUpdated(type: ReturnType)

}

并创建协议数组,并添加/删除侦听器:

var listeners: [ProfileManagerDelegete] = []

func addListener(listener: ProfileManagerDelegete) {
    listeners.append(listener)
}

func removeLister(listener: ProfileManagerDelegete) {
    for lis in listeners {
        if lis == listener { // this line error
            //remove listener
        }
    }
}

任何人都可以提供帮助吗?

2 个答案:

答案 0 :(得分:2)

因为你还没有告诉Swift如何比较ProfileManagerDelegete类型的2个对象。定义一个函数:

protocol ProfileManagerDelegete {
    func dataHaveUpdated(type: ReturnType)
}

func == (lhs: ProfileManagerDelegete, rhs: ProfileManagerDelegete) -> Bool {
    // decide if they are equal
}

答案 1 :(得分:1)

在这种情况下,您想要使用' ==='运营商。只需使ProfileManagerDelegete符合AnyObject。