dovrebbe essere:
var apples = userDefaults.dictionaryForKey("apples_array")
println(apples?[appleId])
Il problema qui è che tipo [NSObject : AnyObject]?
implica un tipo facoltativo, il che significa che stai tentando di chiamare un pedice in quello che è essenzialmente un enum. Quando si tenta di farlo, non viene dichiarato alcun indice, quindi il sistema si strozza.
Aggiungendo il ?
stiamo dicendo, scartare questo valore se possibile, e quindi chiamare il pedice. In questo modo il sistema deduce il tipo [NSObject : AnyObject]
per le dichiarazioni di pedici e tutto è ok.
È inoltre possibile utilizzare !
per forzare uno scartare, ma questo si bloccherà se apples
è nullo. Un altro modo possibile per scrivere questo sarebbe:
let apples = userDefaults.dictionaryForKey("apples_array") ?? [:]
println(apples[appleId])
In questo modo, le mele non è più facoltativa e avrà sempre la sintassi pedice. Non è necessario scartare.
Beh io ho questo problema, ma il mio dizionario non è un optional .. Impossibile iscrivere un valore di tipo '[String: AnyObject]' con un indice di tipo 'String' – SwiftMatt
@SwiftMatt Non sono sicuro, ma questo cambia il gioco possibile con Swift 2.x. La soluzione è sempre la stessa. – ff10