class CustomView: UIView {
var subViewColor:UIColor
var subViewMessage:String
override init(frame:CGRect) {
super.init(frame:frame)
}
init(subViewColor:UIColor,subViewMessage:String){
self.subViewColor = subViewColor
self.subViewMessage = subViewMessage
super.init()
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
我有一个类,我希望用户通过提供如下属性来初始化一个自定义视图:
let myView = CustomLoadingView(initialize properties here)
如果用户不想初始化他们自己的属性,我想使用默认属性初始化CustomLoadingView
...
let myView = CustomLoadingView() // this should initialize using default value
但是,使用此方法时,我会收到以下错误:
必须调用超类UIView的指定初始化程序
4条答案
按热度按时间eh57zj3b1#
在
init(subviewColor: UIColor, subViewMessage: String)
中,您没有调用指定的初始化器(正如编译器很好地指出的那样)。如果你不知道什么是指定的初始化器,它们是必须在某个时候被子类调用的初始化器。
指定的初始值设定项是类的主要初始值设定项。指定的初始值设定项完全初始化该类引入的所有属性,并调用适当的超类初始值设定项沿超类链继续初始化过程。
在这种情况下,
UIView
的指定初始化器是init(frame: CGRect)
,这意味着在某个点上,新的初始化器init(subviewColor: UIColor, subViewMessage: String
必须调用super.init(frame:)
。要解决此问题,请进行以下更改:
或者你可以调用你类中的其他初始化器,最终调用指定的初始化器。
至于简单的
CustomLoadingView()
方法,你必须为它添加另一个初始化器。如果你想了解更多关于指定初始化器和便利初始化器的信息,请阅读here和这里。
rekjcdws2#
您必须在自定义初始值设定项中的某个位置调用UIView指定的初始值设定项之一,例如:
super.init(frame: frameX)
。您对super.init()
的调用不满足此要求。epggiuax3#
对不起,它正在调用
Bundle.main.loadNibNamed("XibNameThatDoesntExist", owner: self, options: nil)
'中自定义视图初始化程序中不存在的xibfkaflof64#
试试看: