2015-01-17 24 views
1

自我的方法我想实现这样的事情:斯威夫特:调用初始化里面

class A { 
    var a, b, c, d: Int 

    init() { 
     reset() 
    } 

    func reset() { 
     a = 1 
     b = 2 
     c = 3 
     d = 4 
    } 

    func blablabla() { 
     ... 
    } 
} 

不能被编译,错误信息:

初始化

之前使用变量“self.a”

没有任何意义,我必须将代码从reset()复制到init()

这是一个缺陷还是有另一种方法来做到这一点?

+0

非常类似的问题在这里:[为什么我会得到一个“初始化之前使用的变量”错误的行,我初始化变量在Swift?](http://stackoverflow.com/questions/27038889/why- DO-I-GET-A-可变二手之前感初始化错误 - 上的线 - 即-I) –

回答

10

不,它不是一个缺陷,只是在初始化器中不能引用self,直到所有存储的属性都已初始化,并且调用了超类初始化器(如果有的话)。

在你的情况下,在方法中进行初始化似乎是合法的,并且从初始化程序调用它,但不幸的是它不起作用。

可能的解决方案:

  • 使性能可选的或隐含展开(气馁,除非你真的需要他们自选)
  • 初始化用假值的属性调用reset前:

    init() { 
        self.a = 0 
        self.b = 0 
        self.c = 0 
        self.d = 0 
    
        reset() 
    } 
    

    var a = 0 
    var b = 0 
    var c = 0 
    var d = 0 
    
    init() { 
        reset() 
    } 
    
3

给出a,b,c和d默认值,特别是如果您要立即更改它们。

相关问题