declarar arreglo array ios arrays xcode dictionary swift

ios - arreglo - Array de claves del diccionario en swift



string array in swift 3 (8)

Array de claves del diccionario en Swift

componentArray = [String] (dict.keys)

Tratar de llenar una matriz con cadenas de las claves en un diccionario de 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

Tambien intentado

componentArray = dict.allKeys as String

pero obtén: ''String'' no es convertible a [String]


Con Swift 3, Dictionary tiene una propiedad de keys . keys tienen la siguiente declaración:

var keys: LazyMapCollection<Dictionary<Key, Value>, Key> { get }

Una colección que contiene solo las claves del diccionario.

Tenga en cuenta que LazyMapCollection se puede asignar fácilmente a un Array con el init(_:) Array .

De NSDictionary a [String]

El siguiente fragmento de clase de AppDelegate iOS muestra cómo obtener una matriz de cadenas ( [String] ) usando la propiedad keys de un NSDictionary :

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { let string = Bundle.main.path(forResource: "Components", ofType: "plist")! if let dict = NSDictionary(contentsOfFile: string) as? [String : Int] { let lazyMapCollection = dict.keys let componentArray = Array(lazyMapCollection) print(componentArray) // prints: ["Car", "Boat"] } return true }

De [String: Int] a [String]

De una manera más general, el siguiente código de Zona de juegos muestra cómo obtener una matriz de cadenas ( [String] ) usando la propiedad de keys de un diccionario con claves de cadena y valores enteros ( [String: Int] ) [String: Int] :

let dictionary = ["Gabrielle": 49, "Bree": 32, "Susan": 12, "Lynette": 7] let lazyMapCollection = dictionary.keys let stringArray = Array(lazyMapCollection) print(stringArray) // prints: ["Bree", "Susan", "Lynette", "Gabrielle"]

De [Int: String] a [String]

El siguiente código de Zona de juegos muestra cómo obtener una matriz de cadenas ( [String] ) usando la propiedad de keys de un diccionario con claves de enteros y valores de cadena ( [Int: String] ):

let dictionary = [49: "Gabrielle", 32: "Bree", 12: "Susan", 7: "Lynette"] let lazyMapCollection = dictionary.keys let stringArray = Array(lazyMapCollection.map { String($0) }) // let stringArray = Array(lazyMapCollection).map { String($0) } // also works print(stringArray) // prints: ["32", "12", "7", "49"]


Esta respuesta será para el diccionario rápido con teclas de cadena. Como esta abajo .

let dict: [String: Int] = ["hey": 1, "yo": 2, "sup": 3, "hello": 4, "whassup": 5]

Aquí está la extensión que usaré.

extension Dictionary { func allKeys() -> [String] { guard self.keys.first is String else { debugPrint("This function will not return other hashable types. (Only strings)") return [] } return self.flatMap { (anEntry) -> String? in guard let temp = anEntry.key as? String else { return nil } return temp } } }

Y obtendré todas las llaves más tarde usando esto.

let componentsArray = dict.allKeys()


Swift 3 y Swift 4

componentArray = Array(dict.keys) // for Dictionary componentArray = dict.allKeys // for NSDictionary


dict.allKeys no es una cadena. Es una [String] , exactamente como lo indica el mensaje de error (asumiendo, por supuesto, que las claves son todas las cadenas; esto es exactamente lo que está afirmando cuando dice eso).

Entonces, empiece por escribir componentArray como [AnyObject] , porque así se escribe en la API de Cocoa, o bien, si lanza dict.allKeys , dict.allKeys a [String] , porque así es como ha escrito componentArray .


NSDictionary es Clase (pase por referencia) Diccionario es Estructura (pasar por valor ) ====== Array from NSDictionary ======

NSDictionary tiene allKeys y allValues obtienen propiedades con el tipo [Any] .

let objesctNSDictionary = NSDictionary.init(dictionary: ["BR": "Brazil", "GH": "Ghana", "JP": "Japan"]) let objectArrayOfAllKeys:Array = objesctNSDictionary.allKeys let objectArrayOfAllValues:Array = objesctNSDictionary.allValues print(objectArrayOfAllKeys) print(objectArrayOfAllValues)

====== Array From Dictionary ======

Referencia de Apple para las propiedades de claves y valores del Diccionario .

let objectDictionary:Dictionary = ["BR": "Brazil", "GH": "Ghana", "JP": "Japan"] let objectArrayOfAllKeys:Array = Array(objectDictionary.keys) let objectArrayOfAllValues:Array = Array(objectDictionary.values) print(objectArrayOfAllKeys) print(objectArrayOfAllValues)



extension Array { public func toDictionary<Key: Hashable>(with selectKey: (Element) -> Key) -> [Key:Element] { var dict = [Key:Element]() for element in self { dict[selectKey(element)] = element } return dict } }