Kann nicht zuordnen, auf 'X' in 'Y' in Swift
Habe ich ein Wörterbuch mit Structs
in es. Ich bin versucht, weisen die Werte der struct
wenn ich eine Schleife durch die dictionary
. Swift sagt mir cannot assign to 'isRunning' in 'blockStatus'
. Ich habe nicht in der Lage, alles zu finden in der Dokumentation auf diese Besondere Unveränderlichkeit der dictionaries
oder structs
.
Gerade vom Spielplatz:
import Cocoa
struct BlockStatus{
var isRunning = false
var timeGapForNextRun = UInt32(0)
var currentInterval = UInt32(0)
}
var statuses = ["block1":BlockStatus(),"block2":BlockStatus()]
for (block, blockStatus) in statuses{
blockStatus.isRunning = true
}
cannot assign to 'isRunning' in 'blockStatus'
blockStatus.isRunning = true
Dieser funktioniert, wenn ich die struct
zu einem class
.
Ich vermute, es hat etwas mit der Tatsache zu tun, dass die Strukturen werden kopiert und Klassen sind immer verwiesen?
EDIT: So, auch wenn es zu kopieren.. Warum kann ich es ändern? Es wäre net mir das falsche Ergebnis, aber Sie können ändern, die Mitglieder der Konstanten, die einfach nicht die Konstante selbst. Zum Beispiel können Sie dies tun:
class A {
var b = 5
}
let a = A()
a.b = 6
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre Vermutung wahr ist.
Durch den Zugriff auf
blockStatus
erstellen Sie eine Kopie, in diesem Fall, es ist ein ständiges kopieren (Iteratoren sind immer konstant).Dies ist ähnlich der folgenden:
Referenzen:
Ablaufsteuerung
Klassen und Strukturen
Methoden
Foo
. Wenn Sie ein array vonFoo
und Sie das array Durchlaufen, können Sie nicht die Eigenschaften der array-Mitglieder, da Foo könnte ein struct. DurchFoo
eineclass
Protokoll habe ich gemacht Swift wieder glücklich.Könnte man eine Schleife über das array mit einem index
funktionieren sollte, ohne immer "nicht vergeben"
Wenn 'Y' in diesem Fall ist ein Protokoll, Unterklasse Ihrem Protokoll zu
class
. Ich hatte ein Protokoll:und versuchte, zu
playerMediator
aus meiner Spieler-Vermittler:Das in sich die Fehler
cannot asign 'playerMediator' in 'element'
Ändern mein Protokoll zum Erben von der Klasse das Problem behoben:
Warum sollte das Erben von der Klasse?
Der Grund dafür, dass es Erben von
class
ist, weil der compiler nicht weiß, was Art Ihr Protokoll ist vererbt. Strukturen, könnte auch Erben, die in diesem Protokoll und Sie nicht zuweisen einer Eigenschaft einer Konstanten Struktur.{get set}
. Hinzufügenclass
es behoben, aber es scheint, wie Sie sollten in der Lage sein, ohne es. Wer weiß, warum-Klasse ist erforderlich?class
. Es ist, weil die Möglichkeit der Vererbung von Strukturen