我不了解此错误。请检查以下代码:
class CardCarousel: UIView {
var numberOfRatesLabel: UILabel
var bestRates: BestRates! {
didSet {
numberOfRatesLabel.text = bestRates.title
}
}
override init(frame: CGRect) {
self.numberOfRatesLabel = numberOfRatesLabel
super.init(frame: frame)
initComponents()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
initComponents()
}
private func initComponents() {
numberOfRatesLabel = UILabel(frame: .zero)
self.addSubview(numberOfRatesLabel)
}
}
我检查了所有提及此错误的问题。我尝试了一些东西,但是没有更好的事情发生。
我发现了此错误:
为其分配属性。
如果我将numberOfRatesLabel
放在init
方法的参数中,则会出现此错误:
Initializer不会从其超类中覆盖指定的初始值设定项
答案 0 :(得分:3)
问题在这里:
override init(frame: CGRect) {
self.numberOfRatesLabel = numberOfRatesLabel // <- no local declaration of numberOfRatesLabel
super.init(frame: frame)
initComponents()
}
您只应该实现以下内容:
convenience init(frame: CGRect, numberOfRatesLabel: UILabel) {
self.numberOfRatesLabel = numberOfRatesLabel
self.init(frame: frame)
initComponents()
}
应该可以解决问题。您不必覆盖init(frame: CGRect)
。但是,当您在initComponents()
中启动标签时,可以这样做:
var numberOfRatesLabel: UILabel?
override init(frame: CGRect) {
super.init(frame: frame)
initComponents()
}
所有取决于您的用例。
答案 1 :(得分:1)
在以下行中:
self.numberOfRatesLabel = numberOfRatesLabel
您没有numberOfRatesLabel
的本地声明,因此它等于
self.numberOfRatesLabel = self.numberOfRatesLabel
由于没有理由这样做,swift
会阻止您这样做。
答案 2 :(得分:0)
我在注释中对初始化器感到不对劲 我现在在自己的位置检查了它的正常工作,希望它也对您也有用。
请仔细阅读评论。
override init(frame: CGRect) {
// this is what you are doing wrong because numberOfRatesLabel class member is not came in to existance without its instance got memory
// you can comment this line if you want to assign a uilable to the numberOfRatesLabel from other class
//self.numberOfRatesLabel = numberOfRatesLabel
super.init(frame: frame)
initComponents()
}
// and still you want to initilize with constructor then you should use convenience Initilizer
convenience init(frame: CGRect, num_ofRatLabel : UILabel) {
self.init(frame: frame)
self.numberOfRatesLabel = num_ofRatLabel
}