2016-06-03 52 views
7

Sto giocando con JSON negli ultimi due giorni e ho dovuto affrontare molti problemi curiosi e grazie allo stack overflow mi aiuta. questa è la chiave in JSON ha il tipo di rimorchio dei valori Tipo di stringa.Come gestire valori json null in Swift

"featured":"1" 

o

"featured": null, 

ho provato un sacco di gestire questo, ma non è riuscito

step 1) 

if dict.objectForKey("featured") as? String != nil { 
    featured = dict.objectForKey("featured") as? String 
    } 

step 2)

let null = NSNull() 
    if dict.objectForKey("featured") as? String != null { 
    featured = dict.objectForKey("featured") as? String 
    } 

fase 3)

if dict.objectForKey("featured") as? String != "" { 
    featured = dict.objectForKey("featured") as? String 
    } 

ma sfortunatamente non riesci a trovare una soluzione, la tua risposta sarà apprezzata.

+0

Sta causando incidente? –

+0

si mentre si memorizza in coredata –

risposta

16

Try This

func nullToNil(value : AnyObject?) -> AnyObject? { 
    if value is NSNull { 
     return nil 
    } else { 
     return value 
    } 
} 

object.feature = nullToNil(dict["feature"]) 

Qui, è possibile utilizzare questo metodo, che converte valore nullo a zero e crash causa wont' nella vostra app.

È inoltre possibile utilizzare come?

object.feature = dict["feature"] as? NSNumber 

Grazie.

+0

Bella risposta Grazie !!!! – MRizwan33

2

Prova questo!

if let demoQuestion = dict.objectForKey("featured"){ 
    let getValue: String = demoQuestion as! String 
} 
else { 
print("JSON is returning nil") 
} 
5

Ecco un codice funzionante, digitare l'operatore di cast (come?) Farà il trucco qui. Null non verrà convertito in stringa in String, quindi l'esecuzione andrà al blocco di errori.

if let featured = dict["featured"] as? String { 
    print("Success") 
} 
else { 
    print("Failure") 
} 
+0

questo funziona per me .. ma in qualche altra logica –

3

concatenamento opzionale con if let o la sua controparte guard let è la strada da percorrere. Tutte e tre le fasi combinate (mancanti, tipo sbagliato - NSNull troppo, stringa vuota):

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 

Se volete sapere di più su opzionale concatenamento check out documentation