Jestem nowy Swift i chciałby zainicjować zmienną składową obiektu, stosując metodę instancji takiego:Wywołanie metody instancji podczas inicjalizacji w 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()
}
}
Zasadniczo zamiast inline cały kod inicjalizacji w init
metody , Chcę wyodrębnić kod inicjujący y
do dedykowanej metody createY
i wywołać tę metodę instancji createY
w init
. Jednak Swift kompilator (Swift 1.2 kompilator w Xcode 6.3 beta) narzeka:
używanie 'ja' na wywołanie metody 'XXX' przed super.init zainicjować Własna
Tutaj 'XXX' jest nazwa metody instancji (createY).
Rozumiem, co kompilator Swift narzeka i jaki potencjalny problem chce rozwiązać. Jednak nie mam pojęcia, jak to naprawić. Jaki powinien być sposób w Swift, aby wywołać inną metodę inicjowania kodu w instancji init
?
Obecnie używam następującej sztuczki jak praca wokół, ale nie sądzę, to jest idiomatyczne rozwiązanie tego problemu (i to rozwiązanie wymaga y
należy zgłaszać za pomocą var
zamiast let
co sprawia, że czuję się nieswojo zbyt):
init(x: String) {
self.x = x
super.init()
self.y = createY()
}
Każdy komentarz jest mile widziany. Dzięki.
Dzięki za odpowiedź, wydaje się, że wciąż mają zadeklarować " y "używając" var "zamiast" let "nawet jeśli moja zmienna" y "jest niezmienna? – nybon
@nybon Dodałem kod samej klasy, aby pokazać, jak miałem na myśli 'createY()' do użycia. 'let' powinno być w porządku. –