example dictionaries data array arrays dictionary swift nsdictionary

arrays - dictionaries - ¿Cuál es la diferencia entre NSDictionary vs Dictionary en Swift?



nsdictionary swift 4 (4)

Estoy aprendiendo Swift, y puedo ver el Dictionary en él.
Pero hay muchos ejemplos que utilizan NSDictionary con Swift.
¿Cuál es la diferencia entre estos dos?
Quiero usar una matriz con índice en Swift como una matriz en PHP.
¿Cuál es mejor usar?


Aquí está el trato,

Para todos los efectos, son la misma cosa. Mientras importes Foundation , el compilador los conocerá como lo mismo.

En cuanto a las diferencias específicas, por lo tanto Apple doc ayuda.

Visión general

NSObject es la clase raíz de la mayoría de las jerarquías de clases de Objective-C. A través de NSObject , los objetos heredan una interfaz básica para el sistema de tiempo de ejecución y la capacidad de comportarse como objetos Objective-C.

Lo que eso significa, en pocas palabras, es que los NSObjects son antiguas reliquias de los tiempos antiguos (objetivo c).

En cuanto a lo que es mejor, eso depende de ti. Considero que los objetos rápidos son mejores que la contraparte de ns solo con el propósito de mantener el código moderno, sin embargo, es posible que tenga que usar los objetos de ns si está usando un código como NSURLCONNECTION que requiere ns objetos.

Espero que esto ayude.


Considera este ejemplo

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)

luego...

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

Usando NSDictionary en swift

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

Ahora necesitas forzar el valor del diccionario para que se ajuste.

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

Por experiencia, al tratar con las respuestas de json, he usado NSDictionary como está escrito de forma flexible y no puedo garantizar que sepa exactamente qué contiene, solo que es json válido Existe una creciente biblioteca de herramientas swift nativas para manejar este caso de uso, sugiero que busque aquí https://github.com/search?q=json+NSDictionary+swift&type=Code&utf8=%E2%9C%93

En este caso, debe piratear datos con el ''si vamos a bailar''.

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

Por último, NSMutableDictionary está más a la par con Dictionary, ya que no podrá mutar los pares clave / valor en un NSDictionary.

p.ej.

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

el trabajo alrededor

let mResults = NSMutableDictionary(dictionary:results) mResults["code"] = NSNumber(100) // <-- OK

lo que pide la aclaración: solo puede pegar NSObjects (NSNumbers / NSArrays / NSCount / NSSet) dentro de los NSMutableDictionaries. El diccionario Swift consigue alrededor de esto.


El diccionario es una estructura Swift nativa. NSDictionary es una clase de cacao. Están unidas entre sí (dentro de los límites habituales), como explican los documentos muy clara y completamente.

Es exactamente paralelo a Array y NSArray.


En la práctica y con respecto al concepto fuerte de Swift, la diferencia significativa es

  • NSDictionary es generalmente de tipo no especificado
  • Se supone que el Dictionary tiene un tipo específico.

Por lo tanto el Dictionary nativo es preferible.