Ich möchte ein Array an ein Objekt übergeben und einen Verweis auf dieses Array speichern. Ich möchte in der Lage sein, dieses Array innerhalb dieses Objekts zu ändern und sicherzustellen, dass es überall anders geändert wird.Speichern einer Referenz auf Array in swift
Hier ist, was ich zu tun versuchen, (wie der Code funktioniert nicht)
class Foo {
var foo : Array<Int>
init(foo: Array<Int>) {
self.foo = foo
}
func modify() {
foo.append(5)
}
}
var a = [1,2,3,4]
let bar = Foo(a)
bar.modify()
print(a) // My goal is that it will print 1,2,3,4,5
Meine bisherigen Ergebnisse
A) Das Array (Standardeinstellung) sind seltsame Weise übergeben. Es ist eine Referenz, bis Sie eine Array-Länge ändern. Sobald Sie eine Länge ändern, wird diese kopiert und geändert. Als Ergebnis, wenn ich irgendetwas davon in das Objekt anhänge oder lösche, wird es außerhalb nicht gesehen
B) Ich kann inout
auf einem Funktionsparameter verwenden. Dies erlaubt mir, es innerhalb dieser Funktion zu modifizieren. Sobald ich jedoch versuche, es einem Objekt zuzuweisen, fällt mir wieder ein: A)
C) Ich kann ein Array in eine Container-Klasse einbinden. Dies ist wahrscheinlich der sauberste Weg. Diese Objekte serialisiere/deserialisiere ich jedoch, und ich würde es lieber nicht in Container einfügen (weil ich einige Dinge für die Serialisierung und Deserialisierung umgehen und sie an den Server senden muss).
Gibt es noch etwas? Vermisse ich ein Swift-Konstrukt, das mir erlaubt, das zu tun?
Wie würden Sie erwarten, dass Sie "a" als Konstante deklarieren? Auch Sie müssten es übergeben mit outout-Parameter und übergeben Sie es an Ihre Methode mit "&" Präfix –
Ich kann "a" zu einem var ändern. Die Verwendung von & und inout-Parameter funktioniert nur, wenn ich das Array nur in der Methode ändere, an die es übergeben wurde. Sobald ich "self.foo = foo" mache, hört es auf zu arbeiten. Bedeutung Änderung von self.foo hat keinen Einfluss auf "a" –
deklariere es als var, definiere var foo: [Int] = [] {willSet (newArray) {a = newArray}} –