我有一个UIButton的子类如下:
class VectorizedButton: UIButton {
override var highlighted: Bool {
didSet {
setNeedsDisplay()
}
}
}
一切都很好,直到我在根控制器中添加了这一行:
var twitterButton: TwitterButton?
TwitterButton扩展了VectorizedButton.
这是我得到的错误:
…UIView+Vectorized.swift:42:7: Class ‘VectorizedButton’ has no initializers
…UIView+Vectorized.swift:44:18: Stored property ‘highlighted’ without initial value prevents synthesized initializers
很简单,让我们设置一个默认值:
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
^
有人在乎解释这里发生了什么吗?
最佳答案 您只需添加所需的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后设置属性.