如何快速返回一个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
的声明移到你的文件的顶层,它不再是一个实例方法,而是一个全局方法。 现在,您可以在初始化程序中调用它。