Swift UIView子类初始化失败

时间:2018-07-23 17:08:36

标签: swift uiview

我创建了一个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问答:

How to properly init passed property in subclass of UIView?

2 个答案:

答案 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()或以后的某个时间对其进行初始化。