I am new to Swift and would like to initialize an object's member variable using an instance method like this:
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()
}
}
Basically, instead of inlining all the initialization code in init
method, I want to extract the initialization code of y
to a dedicated method createY
and call this instance method createY
in init
. However, Swift compiler (Swift 1.2 compiler in Xcode 6.3 beta) complains:
use of 'self' in method call 'xxx' before super.init initialize self
Here 'xxx' is the name of the instance method (createY).
I can understand what Swift compiler is complaining and the potential problem it wants to address. However, I have no idea how to fix it. What should be the correct way in Swift to call other instance method of initialization code in init
?
Currently, I use the following trick as work around but I don't think this is the idiomatic solution to this problem (and this workaround requires y
to be declared using var
instead of let
which makes me feel uneasy too):
init(x: String) {
self.x = x
super.init()
self.y = createY()
}
Any comment is appreciated. Thanks.
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…