我很难理解为什么我在使用Swift的iOS项目中遇到此编译器错误.如果我创建以下类:
class InitTest {
let a: Int
let b: Int
let c: Int
init () {
self.a = 3
self.b = 4
self.c = self.runCalculation()
}
func runCalculation () -> Int {
return self.a * self.b
}
}
Run Code Online (Sandbox Code Playgroud)
我在行上写了一个编译错误,self.c = self.runCalculation()说"在初始化之前使用了变量'self.c'".
起初我以为这是因为编译器无法验证该runCalculation()方法无法访问self.c,但后来我尝试将init方法稍微混合起来:
init () {
self.a = 3
self.c = self.runCalculation()
self.b = 4
}
Run Code Online (Sandbox Code Playgroud)
这次错误是"初始化之前使用的变量'self.b'"(在同一self.runCalculation()行).这表明编译器是能够检查其性能的方法访问,所以据我可以看到应该有最初的情况下,没有问题的.
当然这是一个简单的例子,我可以轻松地重构以避免调用计算方法,但在一个真实的项目中,可能会有几个计算,每个计算都可能非常复杂.我希望能够分离逻辑以保持可读性.
幸运的是,有一个简单的解决方法:
init () {
self.a = 3
self.b = 4
self.c = 0 …Run Code Online (Sandbox Code Playgroud)