如何在swift中从数组中获取对象索引

时间:2016-03-23 08:25:38

标签: ios arrays swift

我正在快速创建一个类作为一组协议的容器。以下是源代码。 KeyValueObserverDelegate方法在KeyValueObserverService类中添加了addObserver()协议。问题发生在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?)
}

1 个答案:

答案 0 :(得分:1)

仔细阅读错误消息

  

...未包含在闭包中

根据定义,闭包括在一对花括号

array.indexOf({$0 == observer})

或使用尾随闭包语法

array.indexOf{$0 == observer}

修改

由于默认情况下协议不符合Equatable,请使用身份运算符

array.indexOf{$0 === observer}