Nuestro grupo de especialistas luego de días de investigación y recopilación de de datos, hallamos la solución, nuestro deseo es que todo este artículo sea de gran utilidad en tu plan.
rápido 5
Usar compactMapValues
:
dictionary.compactMapValues $0
compactMapValues
se ha introducido en Swift 5. Para obtener más información, consulte la propuesta de Swift SE-0218.
ejemplo con diccionario
let json = [
"FirstName": "Anvar",
"LastName": "Azizov",
"Website": nil,
"About": nil,
]
let result = json.compactMapValues $0
print(result) // ["FirstName": "Anvar", "LastName": "Azizov"]
Ejemplo que incluye análisis JSON
let jsonText = """
"FirstName": "Anvar",
"LastName": "Azizov",
"Website": null,
"About": null
"""
let data = jsonText.data(using: .utf8)!
let json = try? JSONSerialization.jsonObject(with: data, options: [])
if let json = json as? [String: Any?]
let result = json.compactMapValues $0
print(result) // ["FirstName": "Anvar", "LastName": "Azizov"]
rápido 4
Yo lo haría combinando filter
con mapValues
:
dictionary.filter $0.value != nil .mapValues $0!
Ejemplos
Use los ejemplos anteriores simplemente reemplace let result
con
let result = json.filter $0.value != nil .mapValues $0!
Puedes crear un array que contiene el keys cuyos valores correspondientes son nulos:
let keysToRemove = dict.keys.array.filter dict[$0]! == nil
y luego recorrer todos los elementos de ese array y quitar el keys del diccionario:
for key in keysToRemove
dict.removeValueForKey(key)
Actualización 2017.01.17
El operador de desenvoltura de fuerza es un poco feo, aunque seguro, como se explica en los comentarios. Probablemente hay varias otras formas de lograr el mismo resultado, una forma más atractiva del mismo método es:
let keysToRemove = dict.keys.filter
guard let value = dict[$0] else return false
return value == nil
Terminé con esto en rápido 2:
extension Dictionary where Value: AnyObject
var nullsRemoved: [Key: Value]
let tup = filter !($0.1 is NSNull)
return tup.reduce([Key: Value]()) (var r, e) in r[e.0] = e.1; return r
Misma respuesta pero para rápido 3:
extension Dictionary
/// An immutable version of update. Returns a new dictionary containing self's values and the key/value passed in.
func updatedValue(_ value: Value, forKey key: Key) -> Dictionary
var result = self
result[key] = value
return result
var nullsRemoved: [Key: Value]
let tup = filter !($0.1 is NSNull)
return tup.reduce([Key: Value]()) $0.0.updatedValue($0.1.value, forKey: $0.1.key)
Las cosas se vuelven mucho más fáciles en rápido 4. Solo usa el diccionario filter
directamente.
jsonResult.filter !($0.1 is NSNull)
O si no desea eliminar el relevante keys, Puedes hacerlo:
jsonResult.mapValues $0 is NSNull ? nil : $0
que reemplazará a la NSNull
valores con nil
en lugar de quitar el keys.
Más adelante puedes encontrar las observaciones de otros usuarios, tú todavía tienes la opción de mostrar el tuyo si te gusta.