如何快速返回一个var

我很困惑,因为我习惯于按照这样的函数来获得var:

class ViewController: UIViewController { var timerVal:Int = calcolo() func calcolo() -> Int { return 0; } } 

但它不工作。 问题是:在调用中缺less参数#1的参数。

有两个问题:

  • 当调用一个实例方法来初始化一个属性时,你必须明确地指定实例,即self
  • 一个实例属性不能用直接或间接引用self的语句或expression式进行初始化,因为在所有属性初始化之前self不可用

为了解决这个问题,你可以声明这个属性是lazy – 它会在第一次被访问时被初始化,所以在实例初始化之后:

 lazy var timerVal:Int = self.calcolo() 

问题是timerVal是一个实例属性, calcolo是一个实例方法。 您不能直接在实例属性的默认值中调用一个实例方法,因为在默认值被分配给实例方法的时候,没有实例! 这个实例正是您在创build过程中所处的位置。

如果您打算编写一个计算属性,则语法如下所示:

 var timerVal:Int { return 0 } 

如果您打算编写一个默认值已计算的属性,则语法如下所示:

 var timerVal:Int = { return 0 }() 

或者你可以声明实例属性是lazy ,所以在初始化的时候,这个实例存在的。

或者你可以把calcolo的声明移到你的文件的顶层,它不再是一个实例方法,而是一个全局方法。 现在,您可以在初始化程序中调用它。