-1

I have two arrays:

var array = Array<Dictionary<String, Any>>()

var deletes = Array<Dictionary<String, Any>>()

I am appending deletes into array based off index:

for item in indexPaths {
            deletes.append(self.array[item.item])
        }

Else where in my code, I am now trying to get the index of self.array of the item in delete:

for item in deletes {
let i = self.array.index(of: item)!
                self.array.remove(at: i)
}

However on I am getting this error on let i

Cannot invoke 'index' with an argument list of type '(of: [String : Any])'

What am I doing wrong? How do I get the index of array of dictionary?

4

3 回答 3

1

您不能.index(of 在任何值的字典上使用

但使用 .index(Where

 for item in deletes {
        let i = array.index { (dic) -> Bool in
              // return item[""] == dic[""] condition
        }
        if i != nil {
            self.array.remove(at: i)

        }

    }
于 2018-06-04T13:16:52.067 回答
0
for item in deletes {
    if let i = self.array.index(of: item) {
        self.array.remove(at: i)
    } else {
        // item is not member of array. 
    }

 }
于 2018-06-04T13:16:49.077 回答
0

我认为问题在于您的删除数组的声明。该数组中的字典必须具有 String 类型的键和 Any 的值。但是 Any 是不可散列的,这是index(of:)工作所需要的。因此,如果您可以保证您的 Value 始终是可散列的,您应该更改您的声明并且您可以使用该index(of:)方法。

改成

var deletes = Array<Dictionary<String, AnyHashable>>()

这将起作用

for item in deletes {
let i = self.array.index(of: item)!
                self.array.remove(at: i)
}
于 2018-06-04T13:18:53.697 回答