class passed by value

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • class passed by value

    Hallo zusammen,

    laut Apples Dokumentation arbeitet eine Swift-Klasse mit references und Swift-Structs mit values.
    Ich benötige in meinem Model aber eine Kopie eines Objektes. Dies geht natürlich nicht, da Swift-Klassen mit Referenzen arbeiten.
    Wie kann ich denn nun eine Kopie einer Instanz machen?

    - Der Umstieg auf Struct geht leider nicht, da mein Model von mehreren Klassen erbt ( Struct können nicht von anderen Klassen erben )

    Wie seid ihr vorgegangen?

    Viele Grüße
    lernen, lernen, lernen :)
  • Hallo zusammen,

    folgendes habe ich umgesetzt:

    1. Datenmodell mit dem NSCopying Protokoll erweitert
    2. Protokoll-Methode "copyWithZone" folgendermaßen implementiert:

    Quellcode

    1. func copyWithZone(zone: NSZone) -> AnyObject {
    2. let newModel = CACDataModel(autoRequest: false)
    3. newModel.customerAndCommunicationData = customerAndCommunicationData
    4. return newModel
    5. }


    3. Im ViewController folgendermaßen aufgerufen:

    Quellcode

    1. //copy cacData
    2. self.copyCACDataModel = cacModel.copy() as! CACDataModel
    3. println(copyCACDataModel)

    Das Ergebnis sieht man im angehängten Screenshot .
    (Die Objekte haben im Debugger die selbe Speicheradresse, ergo gleiche Instanz):



    Was mache ich falsch?

    Viele Grüße
    Dateien
    lernen, lernen, lernen :)
  • Ich habe nach dem Stichwort "deep copy" gesucht, dabei ist jedoch nichts brauchbares herausgekommen.
    Gibt es eine Möglichkeit alle Elemente/Objekte eines Objektes zu kopieren? Da mein Objekt dynamisch und relativ komplex aufgebaut ist,
    wäre das codetechnisch sehr aufwendig.
    lernen, lernen, lernen :)
  • imoney91 schrieb:

    Ich habe nach dem Stichwort "deep copy" gesucht, dabei ist jedoch nichts brauchbares herausgekommen.
    Gibt es eine Möglichkeit alle Elemente/Objekte eines Objektes zu kopieren? Da mein Objekt dynamisch und relativ komplex aufgebaut ist,
    wäre das codetechnisch sehr aufwendig.
    Wenn es für Dich schon aufwändig ist, dann wird ein "deep copy" auch nicht das Ergebnis liefern, dass Du höchstwahrscheinlich erwartest…

    Kannst Du den Fall/Aufbau genauer schildern?

    Viele Grüße
  • Im Anhang habe ich den grundlegenden Aufbau der Klasse/Instanz abgebildet. Ich möchte letztenendes eine Kopie von diesem Objekt machen, da Interaktionen wie Löschen, Hinzufügen und Ändern durch eine Tableview von einem User das Objekt modifiziert. Nun will ich diese Änderungen festhalten, damit ich ein Post-Request an mein Webservice formulieren kann.

    Ich will also eine Kopie eines Objektes vor der Modifikation mit dem modifizierten Objekt vergleichen und so die Änderungen zu identifizieren.
    Dateien
    lernen, lernen, lernen :)
  • Wenn Du die verwendeten Klassen sauber implementierst, dann hat jede Klasse eine passende copy Methode. In den jeweiligen copy Methoden muss man auch nur alle Mutable Objekte kopieren. Immutable Objekte sind ja nicht änderbar und können somit "als Referenz" übernommen werden. Ich sehe hier das Problem nicht. ?(