2015-02-26 12 views
6

Ho un esempio molto semplice di quello che mi piacerebbe fareSwift - Errore Accesso ai dati Da Dizionario con array di dizionari

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"]) 
} 

Fondamentalmente, ho un dizionario i cui valori contengono una serie di [stringa: String] dizionari. Ammucchio i dati in esso, ma quando vado ad accedere ai dati, ottengo questo errore:

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

prega fatemi sapere cosa sto facendo male.

+1

'dati [ "Blah"]' restituisce un optional * * e devono essere scartare. - Questo deve aver avuto risposta prima ... –

+0

Sì, mi dispiace, era ovvio una volta che l'ho visto. Ho pensato che fosse un problema con la gestione rapida di oggetti nidificati, quindi le mie ricerche si sono rivelate vuote. Grazie! –

+0

Ho provato a chiudere come duplicato ma se si esegue una ricerca per questo particolare messaggio di errore, non sembra che ci siano riferimenti. Lo lascerò come è nel caso in cui possa aiutare qualcuno che ha trascurato l'ovvio "?" come ho fatto io –

risposta

12

La tua costante array è un optional. L'iscrizione di un dizionario restituisce sempre un optional. Devi scartarlo.

let dict = array![0] 

Meglio ancora,

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

non piace chiamare un indice su un optional.

Se siete dati certi [ "Blah"] esiste, si dovrebbe fare:

let dict = array![0]