[英]How to get an object index from an array in swift
我正在快速工作中创建一个类,作为一组协议的容器。 下面是源代码。 KeyValueObserverDelegate
协议通过addObserver()
方法添加到KeyValueObserverService
类中。 问题发生在removeObserver()
方法上,该行是index = array.indexOf($0 == observer)
。
我收到一个错误:
闭包中不包含匿名闭包参数。
我不知道我班上怎么了。 如何从数组中获取对象的索引?
class KeyValueObserverService{
private var observerList:Dictionary<String, [KeyValueObserverDelegate]> = Dictionary()
func addObserver(key:String, observer:KeyValueObserverDelegate){
var array:Array<KeyValueObserverDelegate>?
if observerList.keys.contains(key){
array = observerList[key]
} else {
array = Array<KeyValueObserverDelegate>()
self.observerList[key] = array
}
array?.append(observer)
}
func updateValueForKey(key:String, value:AnyObject?){
let array = self.observerList[key];
if array == nil{
return
}
for element in array!{
element.valueChanged(value)
}
}
func removeObserver(key:String, observer:KeyValueObserverDelegate){
if self.observerList.keys.contains(key) == false{
return
}
var array:[KeyValueObserverDelegate] = self.observerList[key]!;
let index:Int?
index = array.indexOf($0 == observer)
array.removeAtIndex(index!)
}
}
protocol KeyValueObserverDelegate :class{
func valueChanged(value:AnyObject?)
}
仔细阅读错误消息
...不包含在闭包中
根据定义,闭合用一对大括号括起来
array.indexOf({$0 == observer})
或尾随闭包语法
array.indexOf{$0 == observer}
编辑:
由于默认情况下协议不符合Equatable
,因此请使用身份运算符
array.indexOf{$0 === observer}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.