2 Stimmen

Im Swift ist es möglich, set, get, willSet und willGet von der Deklaration der Eigenschaft zu trennen?

Ich werde damit beginnen, Ihnen einige Eigenschaften eines Projekts zu zeigen, an dem ich arbeite...

/**  Properties  **/
var coordinates: Coordinates

var text: NSString = "" {
didSet {
    self.needsDisplay = true
}
}

var boxViewGroup: GridBoxViewGroup

var isLocked: Bool = false {
willSet {
    if isSelected || !newValue {
        boxViewGroup.selectedBox = nil
    }
}
}
var isSelected: Bool {
get {
    if boxViewGroup.selectedBox {
        return boxViewGroup.selectedBox === self
    }
    else {return false}
}
}

var invertedFrame: NSRect {
get {
    return NSRect(x: frame.origin.x,
                  y: superview.bounds.height - frame.origin.y,
              width: bounds.size.width,
             height: bounds.size.height)
}

set {

    self.frame = NSRect(x: newValue.origin.x,
                        y: superview.bounds.height - newValue.origin.y - newValue.height,
                    width: newValue.width,
                   height: newValue.height)
}
}

Das sieht ein wenig unordentlich aus, nicht wahr. Also meine Frage ist, ob es möglich ist, get, set, willGet und willSet-Methoden an einem separaten Ort zu platzieren, so dass meine Eigenschaftsdeklarationen so aussehen können...

var coordinates: Coordinates
var boxViewGroup: GridBoxViewGroup
var isSelected: Bool
var invertedFrame: NSRect

So kann ich tatsächlich erkennen, welche Eigenschaften es gibt.

1voto

Kostiantyn Koval Punkte 8241

Es ist möglich, indem man es in 2 Klassen aufteilt. Sie können die Eigenschaftendeklaration in der Unterklasse überschreiben und Eigenschaftsbeobachter hinzufügen

class DataA {
  var coordinates: Coordinates
  var boxViewGroup: GridBoxViewGroup
  var isSelected: Bool
  var invertedFrame: NSRect
}

class A : DataA {
  override var coordinates: Coordinates {
  didSet {
    //code hinzufügen
  }
  willSet(newValue) {
    //code hinzufügen
  }
  } 
}

Erfahren Sie mehr über Eigenschaftsüberschreibung in der Apple-Dokumentation

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X