Qualunque sia l'aspetto dei dati del file JSON, l'oggetto di livello superiore è un array. Poiché hai superato .MutableContainers
per l'argomento options:
, la deserializzazione restituisce un array mutabile.
Si sono forza-casting l'accaduto a un NSDictionary
:
as! NSDictionary
Ma non si può farlo perché si tratta di un array, non un dizionario.
La cosa corretta da fare dipende interamente da ciò per cui stiamo scrivendo il codice.
- Stiamo sempre deserializzando lo stesso JSON qui? Avrà sempre la stessa struttura?
Se non lo è, abbiamo bisogno di un approccio più dinamico. Ma se siamo, questo errore rende chiaro che si sta deserializzazione di un array, quindi cerchiamo di cambiare as! NSDictionary
a:
as NSMutableArray
Questo farà diverse cose.
Dal momento che stiamo prendendo entrambi gli oggetti mutabili, questo ci restituirà oggetti mutevoli (altrimenti non dovremmo leggerli come mutabili).
Leggeremo effettivamente il tipo corretto (un array contro un dizionario).
E rimuovendo lo !
, torneremo un optional. La buona notizia è che questo significa che il nostro codice non si bloccherà solo perché abbiamo ottenuto JSON inaspettato.
Vai a json.org e studia la sintassi JSON. Ci vogliono solo 5-10 minuti per imparare. Quindi, butta fuori qualsiasi esempio da cui si estrae e in realtà scrivi il codice che corrisponde al JSON, comprendendo che un array JSON ('[]') esegue il mapping su un NSArray e un oggetto JSON ('{}') esegue il mapping a un NSDictionary. –