为什么我必须使用计算属性而不是存储属性来访问convertPoint()

时间:2015-12-05 02:00:59

标签: swift

我通过斯坦福大学课程学习Swift语言。 在第五讲中,有一个演示画一个笑脸。

有一个faceCenter声明,代码如下所示。

var faceCenter: CGPoint {
    return convertPoint(center, fromView: superview)
}

但我的问题是为什么我可以像下面这样简单地使用?

var faceCenter: CGPoint = convertPoint(center, fromView: superview)

当我这样做时,系统会给出这个错误,"额外的参数"来自View"在电话"。

有谁能告诉我这个问题?

1 个答案:

答案 0 :(得分:1)

它不起作用,因为#middle-panel尚未初始化。必须在self可用之前分配每个值。

它实际上试图使用自己三次:

self

不幸的是,编译器对此错误并没有多大帮助。

您始终可以将其设为可选项或为其指定默认值。然后在init方法中给它正确的值。

可以在访问var faceCenter: CGPoint = self.convertPoint(self.center, fromView: self.superview) 的同时创建stored property,而无需在init方法中指定值。这涉及self中的方法。声明为faceCenterBeta时,在第一次读取时为其赋值,而不是在初始化对象时为其赋值。它还使用lazy代替closure来获取值。

getter