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.