ich Swift bin neu und möchte ein Objekt der Membervariable mit einer Instanz Methode wie folgt initialisieren: in init
MethodeAufruf Instanz-Methode bei der Initialisierung in Swift
class MyClass {
var x: String
var y: String
func createY() -> String {
self.y = self.x + "_test" // this computation could be much more complex
}
init(x: String) {
self.x = x
self.y = self.createY()
}
}
Grundsätzlich statt inlining all Initialisierungscode Ich möchte den Initialisierungscode y
in eine dedizierte Methode createY
extrahieren und diese Instanzmethode createY
in aufrufen. Allerdings klagt Swift-Compiler (Swift 1.2 Compiler in Xcode 6.3 Beta):
Verwendung von 'Selbst' in 'xxx' Methodenaufruf vor super.init Selbst
Hier 'xxx' initialisieren ist die Name der Instanzmethode (createY).
Ich kann verstehen, was Swift Compiler beschweren und das potenzielle Problem, das es ansprechen möchte. Ich habe jedoch keine Ahnung, wie ich das beheben kann. Was sollte der korrekte Weg in Swift sein, um eine andere Instanz des Initialisierungscodes in init
aufzurufen?
Derzeit verwende ich die folgenden Trick, wie Arbeit um, aber ich glaube nicht, das die idiomatische Lösung für dieses Problem ist (und diese Problemumgehung erfordert y
deklariert werden mit var
statt let
, die mich auch ein ungutes Gefühl macht):
init(x: String) {
self.x = x
super.init()
self.y = createY()
}
Jeder Kommentar wird geschätzt. Vielen Dank.
Danke für die Antwort, es scheint, ich habe noch zu erklären ' y 'mit' var 'anstelle von' let ', auch wenn meine' y 'Variable unveränderlich ist? – nybon
@nycon Ich habe den Code für die Klasse selbst hinzugefügt, um zu zeigen, wie ich 'createY()' gemeint habe. 'Let' sollte in Ordnung sein. –