2015-06-16 9 views
5

Say ISwift Wörterbuch Verwirrung

var dict = parseJSON(getJSON(url)) // This results in an NSDictionary 

haben Warum ist

let a = dict["list"]![1]! as NSDictionary 
let b = a["temp"]!["min"]! as Float 

erlaubt, und dies:

let b = dict["list"]![1]!["temp"]!["min"]! as Float 

führt zu einem Fehler:

Type 'String' does not conform to protocol 'NSCopying'

Bitte erklären Sie, warum dies passiert, beachten Sie, dass ich neu bei Swift bin und keine Erfahrung habe.

Antwort

3

dict["list"]![1]! gibt ein Objekt zurück, das ist noch nicht bekannt ist (AnyObject) und ohne die richtige Besetzung kann der Compiler weiß nicht, dass das zurückgegebene Objekt ein Wörterbuch

In Ihrem ersten Beispiel ist werfen Sie richtig den zurückgegebenen Wert zu einem Wörterbuch und Nur dann können Sie den erwarteten Wert extrahieren.

2

Um die Antwort von @giorashc zu ändern: wie explizite Casting

let b = (dict["list"]![1]! as NSDictionary)["temp"]!["min"]! as Float 

Aber es ist besser in den Fällen lesbar Aufspaltung verwenden.