2015-02-26 16 views
6

mam bardzo prosty przykład tego, co chciałbym zrobićSwift - Błąd dostępu do danych ze słownika z Array słowników

private var data = [String: [[String: String]]]() 

override func viewDidLoad() { 
    super.viewDidLoad() 
    let dict = ["Key": "Value"] 
    data["Blah"] = [dict, dict] 
} 

@IBAction func buttonTap(sender: AnyObject) { 
    let array = data["Blah"] 
    let dict = array[0] //<---- error here 
    println(dict["Key"]) 
} 

Zasadniczo mam słownika, którego wartości zawierają tablicę [ciąg: String] słowniki. Wprowadzam do niego dane, ale kiedy wchodzę, aby uzyskać dostęp do danych, pojawia się ten błąd:

Cannot subscript a value of type '[([String : String])]?' with an index of type 'Int'

Proszę dać mi znać, co robię źle.

+1

'dane [ "Blah"]' Zwraca * opcjonalnie * i należy odwinąć. - To musiało zostać odebrane przed ... –

+0

Tak, przykro mi, to było oczywiste, gdy tylko na to spojrzę. Myślałem, że to problem z szybkim działaniem zagnieżdżonych obiektów, więc moje wyszukiwania pojawiły się puste. Dziękuję Ci! –

+0

Próbowałem zamknąć jako duplikat, ale jeśli wyszukasz ten konkretny komunikat o błędzie, nie ma żadnych odniesień. Zostawię to tak, jakby to mogło pomóc komuś, kto przeoczył oczywiste "?" Jak ja zrobiłem. –

Odpowiedz

12

Twoja stała array jest opcjonalna. Indeksowanie słownika zawsze zwraca opcjonalne. Musisz ją rozpakować.

let dict = array![0] 

Jeszcze lepiej,

if let a = array { 
    let dict = a[0] 
} 
3

Nie lubi wywołanie indeks na opcjonalnym.

Jeśli masz pewność danych [ "Blah"] istnieje, należy zrobić:

let dict = array![0]