我是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()
}
}
Run Code Online (Sandbox Code Playgroud)
基本上,而不是内联所有的初始化代码init的方法,我想的初始化代码提取y到一个专门的方法createY,并调用这个实例方法createY中init.但是,Swift编译器(Xcode 6.3 beta中的Swift 1.2编译器)抱怨:
在super.init初始化self之前,在方法调用'xxx'中使用'self'
这里'xxx'是实例方法(createY)的名称.
我可以理解Swift编译器正在抱怨什么以及它想要解决的潜在问题.但是,我不知道如何解决它.什么应该是Swift中调用初始化代码的其他实例方法的正确方法init?
目前,我使用以下技巧作为解决方法,但我不认为这是解决这个问题的惯用方法(这个解决方法需要y声明使用var而不是let让我感到不安):
init(x: String) {
self.x = x
super.init()
self.y = createY()
}
Run Code Online (Sandbox Code Playgroud)
任何评论表示赞赏.谢谢.