2016-07-22 8 views
1

Ich habe versucht, AnyObject Daten mutierbare Array, aber es funktionierte immer noch wie eine nicht veränderbare Array und stürzt auf Laufzeit nach dem Versuch, es zu mutieren. Kann mir bitte jemand erklären?Casting veränderbare Array wird immer noch als nicht veränderbar in Swift

Wie ich einige Daten aus JSON bin immer und ich weiß es von Array-Datentyp sein wird (ich es Daten am Namensgebung), jetzt warf ich es änderbaren Array, wie dies annehmen:

lassen mutArray : NSMutableArray = Daten als! NSMutableArray

aber mutArray bleibt immer noch als nicht veränderbares Array, wenn ich später versuche, es zu mutieren. Dieser Code funktionierte perfekt vor ein paar Monaten und jetzt gibt es Probleme, wie ich versuche, ein nicht veränderbares Array zu mutieren.

+1

Würde es Ihnen etwas ausmachen, einen Code zu verwenden, der Ihre Schritte ein wenig klarer macht? – FishStix

+1

@FishStix: Hallo, ich habe meine Frage noch einmal bearbeitet. Hoffe ich kann es jetzt besser erklären ?! –

+1

Bitte zeigen Sie uns, wie 'Daten' bevölkert ist –

Antwort

0

Das liegt daran, dass Casting tatsächlich kein Objekt in irgendeiner Weise verändert, es teilt dem Compiler nur mit, dass es einen bestimmten Typ hat. Mit anderen Worten, es wirkt sich nur auf die Art und Weise aus, in der der Code typisiert ist, und ändert das Verhalten des Codes zur Laufzeit nicht. Um tatsächlich ein NSArray in eine NSMutableArray ändern würden Sie müssen:

let mutArray = NSMutableArray(array: data) 

Diese Linie tatsächlich schafft eine neue NSMutableArray und füllt es mit Ihrem data Array.

Wenn Ihr Code zuvor funktioniert hat, dann müssen Ihre Originaldaten bereits ein NSMutableArray sein. Es ist eigentlich ziemlich üblich für NSArray s insgeheim NSMutableArray s zu sein (obwohl es natürlich eine schlechte Idee ist, sich auf diese Tatsache von jeder gegebenen Methode zu verlassen, da, wie wir gerade gelernt haben, es sich jederzeit ändern könnte).

+0

Okay, aber die gleiche Sache arbeitete vorher, aber nicht jetzt. Ändert sich die Speicherstruktur von Swift? Ich versuche nur, das besser zu verstehen, darum gibt es so viele Fragen. –

+0

@Max_Rai: Bearbeitet. Im Grunde hatten Sie vorher Glück. – andyvn22

+0

Verstanden. Vielen Dank für Ihre Zeit! –