我很困惑,因为我习惯于通过这样的函数来获取变量:
class ViewController: UIViewController {
var timerVal:Int = calcolo()
func calcolo() -> Int {
return 0;
}
}
但它不起作用。问题是:调用中缺少参数 #1 的参数。
有 2 个问题:
- 调用实例方法来初始化属性时,必须显式指定实例,即
self
- 实例属性不能用直接或间接引用
self
的语句或表达式进行初始化,因为在初始化所有属性之前self
不可用
要解决此问题,您可以将属性声明为 lazy
- 它将在第一次访问时初始化,因此在实例初始化后:
lazy var timerVal:Int = self.calcolo()
问题是timerVal
是一个实例属性,calcolo
是一个实例方法。不能直接在实例属性的默认值中调用实例方法,因为在将默认值分配给实例方法时,没有实例!该实例正是您正在创建的实例。
如果要编写计算属性,语法如下所示:
var timerVal:Int {
return 0
}
如果要编写计算默认值的属性,则语法如下所示:
var timerVal:Int = {
return 0
}()
或者,您可以将实例属性声明为 lazy
,以便在初始化时实例确实存在。
或者,您可以将calcolo
声明向上移动到文件的顶层,在该级别,它不再是实例方法,而是全局方法。现在,您可以在初始值设定项中调用它。