/ / Come accedere alle variabili statiche nei metodi usando le estensioni del protocollo di tipo astratte di Swift - swift, polymorphism, abstract-class, swift-extensions, swift-protocolli

Come accedere alle variabili statiche nei metodi usando le estensioni del protocollo di tipo astratte di Swift - swift, polymorphism, abstract-class, swift-extensions, swift-protocolli

Ho cercato di creare un comportamento astratto simile a una superclasse in Swift usando i protocolli e le estensioni qui suggeriti: Classi astratte in Swift Language Ma non riesco a capire come scrivere metodi che fanno uso di variabili statiche (di classe), ad esempio, se voglio ottenere il perimetro di una classe di forma astratta:

protocol Shape {
static var numSides: Int {get}
var sideLength: Double {get}
}
class Triangle: Shape {
static var numSides: Int = 3
var sideLength: Double
init (sideLength: Double) { self.sideLength = sideLength }
}
class Square: Shape {
static var numSides: Int = 4
var sideLength: Double
init (sideLength: Double) { self.sideLength = sideLength }
}
extension Shape {
func calcPerimeter() -> Double {
return sideLength * Double(numSides)
}
}

Swift non vuole che io usi le variabili numside statichenel metodo calcPerimeter. So che se avessi fatto una variabile di istanza il codice sarebbe stato eseguito, ma questo non sembra il modo giusto per andare. Qual è il modo migliore per farlo?

risposte:

2 per risposta № 1

Si dovrebbe usare numSide come variabile statica, non come istanza. Non puoi chiamare Shape.numSides ma puoi usare Self parola chiave che fa riferimento alla classe concreta. Prova questo:

Self.numSides