我创建了一个UIView子类:
class RA_Circle: UIView {
let elipseWidth:CGFloat
let elipseHeight:CGFloat
init(elipseWidth: CGFloat, elipseHeight:CGFloat) {
self.elipseWidth = elipseWidth
self.elipseHeight = elipseHeight
super.init(frame: CGRect.zero)
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
}
但是编译器在所需的init上给了我这个错误:
在super.init调用中未初始化属性'self.elipseWidth'
我正在遵循此SO问答:
答案 0 :(得分:1)
在类定义中,您声明的变量没有任何默认值,并且所需的初始化程序在调用super init之前不提供任何值。
有很多方法可以解决这个问题,这里有几种...
一种方法是在属性声明中提供默认值:
var elipseWidth: CGFloat = 0.0
var elipseHeight: CGFloat = 0.0
第二个是使属性可选:
var elipseWidth: CGFloat?
var elipseHeight: CGFloat?
第三种是在所需的初始化程序中提供默认值:
required init?(coder aDecoder: NSCoder) {
elipseWidth = 14.0
elipseHeight = 14.0
super.init(coder: aDecoder)
}
答案 1 :(得分:0)
您必须将let
变量声明更改为var
并且是可选的。在这种情况下,您可以在awakeFromNib()
或以后的某个时间对其进行初始化。