индекс (из: не отображается для [[String: Any]] - PullRequest
0 голосов
/ 01 июня 2018

Для нахождения индекса элемента в array мы используем index (из:

let array = ["Amit","Peter", "Jhon"]
let i = array.index(of: "Peter")
print(i)//gives 1

Теперь я использую [[String:Any]], что array(of dictionary)

let arrayKeyPair: [[String:Any]] = [["name":"Amit"],["name":"Peter"],["name":"Jhon"]]

К сожалению index(of: не заполняется. Почему?

Ответы [ 5 ]

0 голосов
/ 01 июня 2018
let arrayKeyPair: [[String:Any]] = [["name":"Amit"],["name":"Peter"],["name":"Jhon"]]

let arrayKeyPair: [[String:Any]] = [["name":"Amit"],["name":"Peter"],["name":"Jhon"]]
let index = arrayKeyPair.index(where: {$0["name"] as? String == "Amit"})
0 голосов
/ 01 июня 2018

попробуйте этот код

let arrayKeyPair: [[String:Any]] = [["name":"Amit"],["name":"Peter"],["name":"Jhon"]]

    let indexOfA = indexOfQuestion(id: "Peter") // 0
            print(indexOfA)

    func indexOfValue(id: String) -> Int {
            return arrayKeyPair.index { (question) -> Bool in
                return question["name"] as? String == id
                } ?? NSNotFound
        }
0 голосов
/ 01 июня 2018

Вы можете использовать

    let arrayKeyPair: [[String:Any]] = [["name":"Amit"],["name":"Peter"],["name":"Jhon"]]
    let index = arrayKeyPair.index(where: {$0["name"] as? String == "Peter"})
0 голосов
/ 01 июня 2018

index (of: работает с массивом, где элементы соответствуют равноправному протоколу. Вы используете Any, поэтому он не будет работать.

Если вы действительно хотите использовать index (of:) , используйте [[String:String]], это будет работать.

0 голосов
/ 01 июня 2018

Из-за Any то, что происходит за сценой indexOf, является сравнением значений, и, конечно, значение типа any не может быть сравнено

 let arrayKeyPair: [[String:Any]] = [["name":"Amit"],["name":"Peter"],["name":"Jhon"]]

изменяется на

 let arrayKeyPair: [[String:String]] = [["name":"Amit"],["name":"Peter"],["name":"Jhon"]]
...