2014-08-28 8 views

Antwort

12

Wörterbuch ist eine native Swift-Struktur. NSDictionary ist eine Cocoa-Klasse. Sie sind überbrückt (innerhalb der üblichen Grenzen), wie die Dokumente sehr deutlich und vollständig erklären.

Es ist genau parallel zu Array und NSArray.

+1

so Wörterbuch + NSDictionary ist das gleiche? aber ich sehe, es gibt zwei Möglichkeiten, es zu deklarieren. Also habe ich verwirrt. – TomSawyer

+0

Sie sind "die gleichen", da die Laufzeit zwischen den beiden konvertieren wird. – CodaFi

+12

Eigentlich ist 'Dictionary' eine Struktur, keine Klasse. – newacct

2

Hier ist der Deal,

Für alle Absichten und Zwecke, sie sind das gleiche. Solange Sie Foundation importieren, wird der Compiler sie als die gleiche Sache kennen.

Für spezifische Unterschiede hilft thus Apple doc.

Übersicht

NSObject ist die Wurzelklasse der meisten Objective-C Klassenhierarchien. Über NSObject erben Objekte eine grundlegende Schnittstelle zum Laufzeitsystem und die Fähigkeit, sich als Objective-C-Objekte zu verhalten.

Was bedeutet, kurz gesagt, dass NSObjects alte Relikte aus alten (objektiven c) Zeiten sind.

Was ist besser, das liegt an Ihnen. Ich finde swift Objekte besser als das ns Gegenstück nur für den Zweck, Code modern zu halten, jedoch müssen Sie möglicherweise ns Objekte verwenden, wenn Sie Code wie NSURLCONNECTION verwenden, die ns Objekte erfordert.

Hoffe, das hilft.

+1

Sind sie das? Swift-Wörterbücher sind pass-by-value, während NSDictionaries by reference sind. –

4

In der Praxis und im Hinblick auf die starke Art Konzept des Swift der wesentliche Unterschied ist

  • NSDictionary im Allgemeinen nicht näher bezeichnet eine bestimmte Art haben, ist
  • Dictionary soll eingeben.

Daher ist native Dictionary vorzuziehen.

1

Betrachten Sie dieses Beispiel

let dataArray = NSMutableArray() 

    let d0 = ["code":"AA","name":"American Airlines"] 
    let d1 = ["code":"BA","name":"British Airlines"] 
    let d2 = ["code":"DA","name":"Delta Airlines"] 

    dataArray.addObject(d0) 
    dataArray.addObject(d1) 
    dataArray.addObject(d2) 

später ...

let d0 = dataArray.objectAtIndex(0) as! [String:String] 
let lbl = UILabel() 
lbl.text = d0["code"] // no xcode warnings 

Mit NSDictionary in schnellen

let d0 = dataArray.objectAtIndex(0) as! NSDictionary 

Jetzt müssen Sie das Wörterbuch Wert in Form zwingen.

lbl1.text = d0["name"] as! String 

Aus Erfahrung - wenn sie mit Json Antworten zu tun - ich habe verwendet NSDictionary wie es lose typisiert ist, und ich kann nicht genau wissen, garantiert, was es enthält - nur das gilt json. Es gibt eine wachsende Bibliothek von einheimischen Swift-Tools, um diesen Anwendungsfall zu behandeln, schlage ich vor, hier zu suchen https://github.com/search?q=json+NSDictionary+swift&type=Code&utf8=%E2%9C%93

In diesem Fall - müssen Sie um Daten mit dem "wenn lassen" tanzen hacken.

if let results = json["result"] as? NSDictionary 

schließlich - NSMutableDictionary ist gleichauf mit Wörterbuch, da Sie nicht in der Lage sein, die Schlüssel/Wert-Paare auf einem NSDictionary zu mutieren.

z.

results["code"] = 100 // <-- BOOM 

die Arbeit um -

let mResults = NSMutableDictionary(dictionary:results) 

mResults["code"] = NSNumber(100) // <-- OK 

, die die Klärung bittet - Sie können nur halten NSObjects (NSNumbers/NSArrays/NSCOUNT/NSSet) innerhalb der NSMutableDictionaries. Das Swift Dictionary kommt um diese Sache herum.

Verwandte Themen