swift - the - Compruebe si existe clave en el diccionario de tipo
swift(lenguaje de programación) (6)
¿Cómo puedo comprobar si existe una clave en un diccionario? Mi diccionario es de tipo [Type:Type?]
.
No puedo simplemente revisar dictionary[key] == nil
, ya que eso podría resultar de que el valor sea nil
.
¿Algunas ideas?
Creo que indexForKey(key: Key)
del tipo de diccionario es lo que está buscando. Devuelve el índice para una clave dada, pero lo más importante para sus propuestas, devuelve nulo si no puede encontrar la clave especificada en el diccionario.
if dictionary.indexForKey("someKey") != nil {
// the key exists in the dictionary
}
Sintaxis de Swift 3 ....
if dictionary.index(forKey: "someKey") == nil {
print("the key ''someKey'' is NOT in the dictionary")
}
En realidad, su dictionary[key] == nil
prueba dictionary[key] == nil
puede usarse para verificar si existe una clave en un diccionario. No producirá true
si el valor se establece en nil
:
let dict : [String : Int?] = ["a" : 1, "b" : nil]
dict["a"] == nil // false, dict["a"] is .Some(.Some(1))
dict["b"] == nil // false !!, dict["b"] is .Some(.None)
dict["c"] == nil // true, dict["c"] is .None
Para distinguir entre "la clave no está presente en dict" y "el valor de la clave es nula", puede realizar una asignación opcional anidada:
if let val = dict["key"] {
if let x = val {
println(x)
} else {
println("value is nil")
}
} else {
println("key is not present in dict")
}
Esto funciona para mí [Swift 3.0]:
let myVar = "c"
let myDict: [String: Int] = ["a": 0, "b": 1, "c": 2]
if myDict.keys.contains(myVar) {
print(myVar)
} else {
print("ERROR")
}
Lo manejé de esta manera en Swift 4:
extension Dictionary {
func contains(key: Key) -> Bool {
let value = self.contains { (k,_) -> Bool in key == k }
return value
}
}
Esto usa Dictionary.contains(where: (key: Hashable, value: Value) throws -> Bool)
. Al encapsularlo como una extensión, tengo una buena oportunidad de actualizar la implementación a algo mejor sin modificar mi código. index(forKey:Key)
crear datos, lo que hace el index(forKey:Key)
. Espero que sea más eficiente que acceder a las keys
ya que debe crear toda la matriz antes de buscarla.
Prueba esto:
let value = dict[key] != nil
Espero que te funcione. Gracias
Siempre puedes hacer:
let arrayOfKeys = dictionary.allKeys
if (arrayOfKeys.containsObject(yourKey)) {
}
else {
}
Sin embargo, realmente me disgusta la idea de crear un NSDictionary que pueda contener opcionales.