如何初始化相互依赖的属性

如何初始化相互依赖的属性,第1张

如何初始化相互依赖的属性

@MartinR在这里指出了主要问题:

var corX = 0var corY = 0var panzer = UIImageView(frame: CGRectMake(corX, corY, 30, 40))

问题在于,Swift默认初始化器无法引用另一个属性的值,因为在初始化时,该属性尚不存在(因为实例本身尚不存在)。基本上,在

panzer
的默认初始值设定项中,您隐式地引用
self.corX
self.corY
-,但是没有,
self
因为
self
这正是我们在创建过程中所需要的。

一种解决方法是使初始化程序变得懒惰:

class ViewController: UIViewController {    var corX : CGFloat = 0    var corY : CGFloat = 0    lazy var panzer : UIImageView = UIImageView(frame: CGRectMake(self.corX, self.corY, 30, 40))    // ...}

这是合法的,因为

panzer
直到您的实际代码首次引用它时才进行初始化。到那时,
self
它的属性已经存在。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5651864.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存