2014-07-04 5 views
41

Jetzt weiß ich, dass wenn Swift kompiliert es nur ein NSDictionary macht, aber die NSDictionary und Swift Wörterbücher haben unterschiedliche Syntax. Gibt es eine Möglichkeit (durch eine Schleife oder etwas), ein NSDictionary in ein schnelles Wörterbuch des gleichen Typs für <key, value> zu konvertieren?Convert NSDictionary in Swift Dictionary

ODER

Gibt es eine Möglichkeit, dies zu einem Swift-Wörterbuch zu konvertieren, anstatt NSDictionary?

let jsonDict = NSJSONSerialization.JSONObjectWithData(jsonData, options: nil, error: &error) as NSDictionary 
+3

unter der Haube ist das _Swift_ 'Dictionary' li Termal ein _Obj-C_ 'NSMutableDictionary', können Sie diese gebührenfrei überbrücken. – holex

Antwort

3

NSDictionary und Dictionary sind ziemlich austauschbar. So gibt es keine Notwendigkeit, aber ja können Sie:

let jsonDict = (NSJSONSerialization.JSONObjectWithData(jsonData, options: nil, error: &error) as NSDictionary) as Dictionary 
+0

aber im Wörterbuch sind nsarrays, nsnumbers, nsstrings .... – Chet

+0

Sind sie was? Austauschbar mit ihren Gegenstücken? Ja. – Oxcug

+0

Ich muss immer '' NSString' überall tippen und ti ''String' nicht mögen. Vielleicht liegt das daran, dass ich 'jsonDict: [[String: AnyObject]]' 'definiere? – Chet

26

Verwendung:

let jsonDic = NSJSONSerialization.JSONObjectWithData(jsonData, options: NSJSONReadingOptions.MutableContainers, error: &error) as Dictionary<String, AnyObject>; 
+4

Aus irgendeinem Grund funktionierte das nicht für mich. Was für mich funktionierte, war 'let b = d als [NSObject: AnyObject]' – Mazyod

+0

Für SWIFT 3 können Sie JSONSerialization verwenden. – Efren

4

Ich fand Antwort von http://www.swift-studies.com/blog/2014/6/6/loading-a-swift-dictionary-from-a-plist-file

var swiftDict : Dictionary<String,AnyObject!> = Dictionary<String,AnyObject!>() 
for key : AnyObject in ocDictionary.allKeys { 
    let stringKey = key as String 
    if let keyValue = ocDictionary.valueForKey(stringKey){ 
     swiftDict[stringKey] = keyValue 
    } 
} 
+1

Vielleicht in einigen sehr speziellen Fällen, die sich auszahlen können, aber ich denke nicht, dass der Overhead in Speicher, CPU und Akku Verwendung einer flachen Kopie des NSDictionary wirklich einen Vorteil hat. Da Sie ein NSDictionary als normales Dictionary verwenden können, ist der Unterschied fast nicht existent. – ncerezo

-4

nur erklären, dass er Swift-Wörterbuch ist

var values: [String: AnyObject] = [ 
    "key1": 100, 
    "key2": "meow", 
] 

values["key3"] = 20 
+0

Er fragt nach dem Ändern seines Typs in Swift vom Objective-C-Typ, und erstellt keinen Swift-Dictionary-Typ von Grund auf neu. – santibernaldo

+0

@santibernaldo Sie können eine for-Schleife verwenden, um aus diesem Objective-C-Typ das Swift-Wörterbuch zuzuordnen – onmyway133