Mam dwie tablice:

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

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

Dołączę dołączanie do tablicy Wskaźnik OFF:

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

W przeciwnym razie, gdzie w moim kodzie próbuję teraz uzyskać indeks samodzielnie. Barra w Usuń:

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

Jednak na ten temat otrzymuję ten błąd

Nie można wywołać "indeksu" za pomocą listy typów typu "(z: [ciąg: dowolny])"

Co ja robię źle? Jak uzyskać indeks tablicy słownika?

-1
user979331 4 czerwiec 2018, 16:12

3 odpowiedzi

Najlepsza odpowiedź

Nie możesz użyć .index(of na słownik dowolnej wartości

Ale użyj .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)

        }

    }
1
Abdelahad Darwish 4 czerwiec 2018, 13:25
for item in deletes {
    if let i = self.array.index(of: item) {
        self.array.remove(at: i)
    } else {
        // item is not member of array. 
    }

 }
0
EmreSURK 4 czerwiec 2018, 13:16

Zakładam, że problem jest deklaracją usuwania macierzy. Słowniki w tej tablicy muszą mieć klucz typu typu i wartość dowolnego. Ale każdy nie jest konieczny, który jest potrzebny index(of:) do pracy. Jeśli więc możesz zagwarantować, że Twoja wartość jest zawsze zmienna, powinieneś zmienić deklarację i można użyć metody index(of:).

Zmień na

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

I to będzie działać

for item in deletes {
let i = self.array.index(of: item)!
                self.array.remove(at: i)
}
0
pstued 4 czerwiec 2018, 13:18