我有UIButton
的子类如下:
class VectorizedButton: UIButton {
override var highlighted: Bool {
didSet {
setNeedsDisplay()
}
}
}
一切都很好,直到我在根控制器中添加了这一行:
var twitterButton: TwitterButton?
TwitterButton
延伸VectorizedButton
。
这是我得到的错误:
... UIView + Vectorized.swift:42:7:Class' VectorizedButton'没有初始化者 ... UIView + Vectorized.swift:44:18:存储的属性'突出显示'没有初始值会阻止合成初始化器
简单,让我们设置一个默认值:
override var highlighted: Bool = false
更严重的错误:
<unknown>:0: error: super.init called multiple times in initializer
<unknown>:0: error: super.init called multiple times in initializer
<unknown>:0: error: super.init called multiple times in initializer
尝试覆盖init?
required init(coder aDecoder: NSCoder) {
highlighted = false
super.init(coder: aDecoder)
}
更多错误:
error: 'self' used before super.init call
highlighted = false
^
error: 'self' used before super.init call
highlighted = false
^
任何人都在乎解释这里发生了什么?
答案 0 :(得分:2)
您只需添加所需的init
即可这是我做的:
class VectorizedButton: UIButton {
override var highlighted: Bool {
didSet {
setNeedsDisplay()
}
}
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
}
class TwitterButton: VectorizedButton {
}
在ViewController中:
var twitterButton: TwitterButton?
这样做很好。
您想要覆盖突出显示的属性并将twitterButton创建为Optional,因此您需要在类中实现init。
您无法使用此设置突出显示的属性:
override var highlighted: Bool = false
您需要在init中设置它,或者像这样:
override var highlighted: Bool {
get { return false }
set { super.highlighted = newValue }
}
为此:
required init(coder aDecoder: NSCoder) {
highlighted = false
super.init(coder: aDecoder)
}
您需要在调用super.init后设置属性。