@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它的属性已经存在。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)