Intentando llenar una matriz con cadenas de las teclas en un diccionario en forma rápida.
var componentArray: [String]
let dict = NSDictionary(contentsOfFile: NSBundle.mainBundle().pathForResource("Components", ofType: "plist")!)
componentArray = dict.allKeys
Esto devuelve un error de: 'AnyObject' no idéntico a la cadena
También probé
componentArray = dict.allKeys as String
pero obtener: 'String' no es convertible a [String]
Con Swift 3,
Dictionary
tiene unakeys
propiedad.keys
tiene la siguiente declaración:Tenga en cuenta que
LazyMapCollection
tan fácilmente se puede asignar a unaArray
conArray
'sinit(_:)
inicializador.De
NSDictionary
a[String]
El siguiente
AppDelegate
fragmento de clase de iOS muestra cómo obtener una matriz de cadenas ([String]
) usando lakeys
propiedad de aNSDictionary
:De
[String: Int]
a[String]
De manera más general, el siguiente código de Playground muestra cómo obtener una matriz de cadenas (
[String]
) usando lakeys
propiedad de un diccionario con claves de cadena y valores enteros ([String: Int]
):De
[Int: String]
a[String]
El siguiente código de Playground muestra cómo obtener una matriz de cadenas (
[String]
) usando lakeys
propiedad de un diccionario con claves enteras y valores de cadena ([Int: String]
):fuente
Dictionary<String, String>.Keys
: ¿tiene alguna idea de cuándo queremos usar ese tipo y cómo?Matriz de teclas de diccionario en Swift
fuente
dict.allKeys
No es una cadena. Es[String]
exactamente lo que le dice el mensaje de error (suponiendo, por supuesto, que las claves son todas cadenas; esto es exactamente lo que está afirmando cuando dice eso).Por lo tanto, comience escribiendo
componentArray
como[AnyObject]
, porque así es como se escribe en la API de Cocoa, o bien, si lanzadict.allKeys
, envíe a[String]
, porque así es como ha escritocomponentArray
.fuente
fuente
NSDictionary es Clase (pase por referencia) Diccionario es Estructura (pase por valor ) ====== Matriz de NSDictionary ======
NSDictionary tiene allKeys y allValues obtiene propiedades con el tipo [Any] .
====== Matriz del diccionario ======
Referencia de Apple para las propiedades de valores y claves del Diccionario .
fuente
eso le da a [String] https://developer.apple.com/documentation/swift/array/2945003-sorted
fuente
De la documentación oficial de Array Apple :
init(_:)
- Crea una matriz que contiene los elementos de una secuencia.Declaración
Parámetros
s - La secuencia de elementos para convertir en una matriz.
Discusión
fuente
Puede usar dictionary.map así:
La explicación: Map itera a través de myDictionary y acepta cada par de clave y valor como $ 0. Desde aquí puede obtener $ 0.key o $ 0.value. Dentro del cierre final {}, puede transformar cada elemento y devolver ese elemento. Como quieres $ 0 y lo quieres como una cadena, entonces conviertes usando String ($ 0.key). Recopila los elementos transformados en una serie de cadenas.
fuente
Esta respuesta será para un diccionario rápido con teclas de cadena. Como este a continuación .
Aquí está la extensión que usaré.
Y obtendré todas las claves más tarde usando esto.
fuente
Swift 5
Esto funciona para mi.
fuente
fuente