gpt4 book ai didi

ios - 如何快速从数组中获取对象索引

转载 作者:行者123 更新时间:2023-11-29 01:07:27 24 4
gpt4 key购买 nike

我正在快速创建一个类作为一组协议(protocol)的容器。下面是源代码。 KeyValueObserverDelegate 协议(protocol)通过 addObserver() 方法添加到 KeyValueObserverService 类中。问题发生在 removeObserver() 方法上,该行是 index = array.indexOf($0 == observer)

我收到一个错误:

anonymous closure argument not contained in a closure.

我不知道我的类(class)出了什么问题。如何从数组中获取对象的索引?

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?)
}

最佳答案

仔细阅读错误信息

...not contained in a closure

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

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

或使用尾随闭包语法

array.indexOf{$0 == observer}

编辑:

由于协议(protocol)不符合 Equatable,默认情况下使用 identity operator

array.indexOf{$0 === observer}

关于ios - 如何快速从数组中获取对象索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36173039/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com