下面是一個例子項目:http://cl.ly/3N2u2i1S441M爲什麼我的超類在Swift中調用子類的方法而不是自己的方法?
我在UITableViewCell
超,因爲正在啓動子當我打電話super.init()
。在子類和超類的init
的底部,我調用一個方法,調用styleCell
,將樣式應用於它。這個方法來自它們都符合的協議,其中一個隱式地符合,因爲它是子類,它覆蓋了方法。
在超類的終結init
,這種風格方法被調用,但它調用子類styleCell
方法,而不是自己的。
爲什麼地球上會發生這種情況?
這是Swift的錯誤嗎?我附加了一些代碼,除了上述項目,以顯示該問題:
超類的表格單元格:
class SuperTableViewCell: UITableViewCell, Style {
var mysuperview: UIView!
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
mysuperview = UIView()
doStyle()
}
required init?(coder aDecoder: NSCoder) {
fatalError("Must be created in code.")
}
func doStyle() {
print("super class")
}
}
子類的表格單元格:
class SubTableViewCell: SuperTableViewCell {
var mysubview: UIView!
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
mysubview = UIView()
doStyle()
}
required init?(coder aDecoder: NSCoder) {
fatalError("Must be created in code.")
}
override func doStyle() {
super.doStyle()
mysubview!.backgroundColor = UIColor.greenColor()
}
}
Style類和協議:
class StyleManager: NSObject {
}
protocol Style {
func doStyle()
}
這會導致發生運行時錯誤,並在子類單元嘗試設置它時發生崩潰在doStyle()
查看。
你可以發佈代碼,MCVE嗎? –
MCVE是什麼意思?我會盡快獲得代碼。 –
[MCVE](http://stackoverflow.com/help/mcve) –