Я новичок в 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()
}
}
В принципе, вместо того, чтобы вставлять весь код инициализации в метод init
, я хочу извлечь код инициализации y
выделенному методу createY
и вызвать этот метод экземпляра createY
в init
. Однако компилятор Swift (компилятор Swift 1.2 в Xcode 6.3 beta) жалуется:
использование 'self' в вызове метода 'xxx' перед super.init инициализировать self
Здесь 'xxx' - это имя метода экземпляра (createY).
Я могу понять, что компилятор Swift жалуется, и потенциальную проблему, которую он хочет решить. Однако я не знаю, как это исправить. Что должно быть правильным способом в Swift для вызова другого метода инициализации кода экземпляра в init
?
В настоящее время я использую следующий трюк, поскольку работаю, но я не думаю, что это идиоматическое решение этой проблемы (и это обходное решение требует, чтобы y
был объявлен с использованием var
вместо let
, что заставляет меня тоже чувствую себя неловко):
init(x: String) {
self.x = x
super.init()
self.y = createY()
}
Любые комментарии приветствуются. Спасибо.