recorrer funciones elementos diccionario arreglos array agregar swift dictionary

funciones - Determinar si el diccionario Swift contiene clave y obtener alguno de sus valores



swift arreglos (7)

¿Por qué no simplemente verificar dict.keys.contains(key) ? Comprobar dict[key] != nil no funcionará en los casos en que el valor sea nil. Como con un diccionario [String: String?] Por ejemplo.

Actualmente estoy usando los siguientes fragmentos de código (torpes) para determinar si un diccionario Swift (no vacío) contiene una clave determinada y para obtener un valor (cualquiera) del mismo diccionario.

¿Cómo se puede poner esto más elegantemente en Swift?

// excerpt from method that determines if dict contains key if let _ = dict[key] { return true } else { return false } // excerpt from method that obtains first value from dict for (_, value) in dict { return value }


Esto es lo que funciona para mí en Swift 3

let _ = (dict[key].map { $0 as? String } ?? "")


La respuesta aceptada let keyExists = dict[key] != nil no funcionará si el Diccionario contiene la clave pero tiene un valor de nil.

Si quiere estar seguro de que el Diccionario no contiene la clave, use esto (probado en Swift 4).

if dict.keys.contains(key) { // contains key } else { // does not contain key }


Mi solución para una implementación de caché que almacena NSAttributedString opcional:

public static var attributedMessageTextCache = [String: NSAttributedString?]() if attributedMessageTextCache.index(forKey: "key") != nil { if let attributedMessageText = TextChatCache.attributedMessageTextCache["key"] { return attributedMessageText } return nil } TextChatCache.attributedMessageTextCache["key"] = .some(.none) return nil


No necesita ningún código especial para hacer esto, porque es lo que un diccionario ya hace. Cuando obtiene dict[key] , sabe si el diccionario contiene la clave, porque el Opcional que obtiene no es nil (y contiene el valor).

Entonces, si solo desea responder la pregunta de si el diccionario contiene la clave, pregunte:

let keyExists = dict[key] != nil

Si desea el valor y sabe que el diccionario contiene la clave, diga:

let val = dict[key]!

Pero si, como suele suceder, no sabe que contiene la clave (desea obtenerla y usarla, pero solo si existe), use algo como if let :

if let val = dict[key] { // now val is not nil and the Optional has been unwrapped, so use it }


Parece que obtuvo lo que necesita de @matt, pero si desea una forma rápida de obtener un valor para una clave, o simplemente el primer valor si esa clave no existe:

extension Dictionary { func keyedOrFirstValue(key: Key) -> Value? { // if key not found, replace the nil with // the first element of the values collection return self[key] ?? first(self.values) // note, this is still an optional (because the // dictionary could be empty) } } let d = ["one":"red", "two":"blue"] d.keyedOrFirstValue("one") // {Some "red"} d.keyedOrFirstValue("two") // {Some "blue"} d.keyedOrFirstValue("three") // {Some "red”}

Tenga en cuenta que no garantiza lo que realmente obtendrá como primer valor, simplemente sucede que en este caso devuelve "rojo".


if dictionayTemp["quantity"] != nil { //write your code }