Je joue avec Json depuis deux jours et je fais face à beaucoup de problèmes curieux. Grâce au débordement de pile, cela m'aide. c'est la clé sélectionnée par json qui a le type de valeur String Type.
"featured":"1"
ou
"featured": null,
j'ai beaucoup essayé de gérer ça mais j'ai échoué
step 1)
if dict.objectForKey("featured") as? String != nil {
featured = dict.objectForKey("featured") as? String
}
étape 2)
let null = NSNull()
if dict.objectForKey("featured") as? String != null {
featured = dict.objectForKey("featured") as? String
}
étape 3)
if dict.objectForKey("featured") as? String != "" {
featured = dict.objectForKey("featured") as? String
}
mais malheureusement, la solution ne peut pas être trouvée, votre réponse sera appréciée.
Essaye ça
func nullToNil(value : AnyObject?) -> AnyObject? {
if value is NSNull {
return nil
} else {
return value
}
}
object.feature = nullToNil(dict["feature"])
Ici, vous pouvez utiliser cette méthode, qui convertira la valeur null en null et ne causera pas de crash dans votre application.
Vous pouvez également utiliser comme?
object.feature = dict["feature"] as? NSNumber
Merci.
Voici un code de travail, l'opérateur de conversion de type (comme?) Fera l'affaire ici. Null ne sera pas transtypé dans String, donc l'exécution ira au bloc d'échec.
if let featured = dict["featured"] as? String {
print("Success")
}
else {
print("Failure")
}
Essaye ça!
if let demoQuestion = dict.objectForKey("featured"){
let getValue: String = demoQuestion as! String
}
else {
print("JSON is returning nil")
}
Un chaînage facultatif avec if let
ou son homologue guard let
est le chemin à parcourir. Les trois étapes combinées (manquant, type incorrect - NSNull également, chaîne vide):
guard let featured = dict.objectForKey("featured") as? String where !value.isEmpty else {
print("featured has wrong value")
}
// do what you need to do with featured
Si vous souhaitez en savoir plus sur l'enchaînement optionnel consultez la documentation
Salut, vous pouvez utiliser la fonction ci-dessous pour supprimer null pour vider la chaîne et éviter les plantages.
func removeNullFromDict (dict : NSMutableDictionary) -> NSMutableDictionary
{
let dic = dict;
for (key, value) in dict {
let val : NSObject = value as! NSObject;
if(val.isEqual(NSNull()))
{
dic.setValue("", forKey: (key as? String)!)
}
else
{
dic.setValue(value, forKey: key as! String)
}
}
return dic;
}
et avant de donner le dict à n'importe quelle fonction d'appel de méthode en dessous
let newdict = self.removeNullFromDict(dict: dict);
j'ai fait une fonction statique pour convertir la valeur de json en chaîne optionnelle.
class Tools{
static func setOptionalStr(value : Any?) -> String?{
guard let string = value as! String?, !string.isEmpty else {
return nil
}
return value as? String
}
}
Dans mon contrôleur
let urlStats: String? = Tools.setOptionalStr(value: json["UrlStats"])
je suis ouvert à vos commentaires