Betrachten zuzugreifen:Wie ein Swift Enum zugehörige Wert außerhalb einer switch-Anweisung
enum Line {
case Horizontal(CGFloat)
case Vertical(CGFloat)
}
let leftEdge = Line.Horizontal(0.0)
let leftMaskRightEdge = Line.Horizontal(0.05)
Wie kann ich, sagen wir, lefEdge
‚s-Wert zugeordnet, direkt, ohne eine switch-Anweisung zu verwenden?
let noIdeaHowTo = leftEdge.associatedValue + 0.5
Dies wird nicht einmal kompiliert!
Ich habe mir theseSOquestions angesehen, aber keine der Antworten scheint dieses Problem zu beheben.
Die obige noIdeaHowTo
nicht Compilierung Linie sollte wirklich sein, dass Einzeiler, sondern weil die jede Art sein kann, Ich kann nicht einmal sehen, wie Benutzercode schreiben könnte sogar eine „generische“ erhalten oder associatedValue Methode in le ENUM selbst .
endete ich damit, aber es ist gross und muss mir der Code jedes Mal zu überdenken ich hinzufügen/ändern Fall ...
enum Line {
case Horizontal(CGFloat)
case Vertical(CGFloat)
var associatedValue: CGFloat {
get {
switch self {
case .Horizontal(let value): return value
case .Vertical(let value): return value
}
}
}
}
Alle Zeiger anyone?
Ich denke, was Sie getan haben, ist richtig (berechnete Eigenschaft, das ist). Enums können verknüpfte Werte eines beliebigen Typs und, was noch wichtiger ist, zählen. Ich sehe nicht, wie Apple Kurzzugriff auf sie bieten könnte, ohne uns in zahlreiche "as" und "if" zu zwingen. – courteouselk
BTW, wenn Ihre enum CGFloat mit jedem Fall verknüpft ist, können Sie Rohwert anstelle von Assoziation verwenden. – courteouselk
@AntonBronnikov Rohwerte sind konstant und müssen eindeutig sein, d. H. Sie können nicht zwei horizontale Instanzen mit einem anderen Wert haben. – Arkku