从初始化程序返回之前不会调用Super.init
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从初始化程序返回之前不会调用Super.init相关的知识,希望对你有一定的参考价值。
我尝试给我的UITableViewCell类一个自定义初始化程序,但我无法弄清楚我做错了什么。
这是我的代码:
init(dataObject: [NSManagedObject]!, objectAttributeValues: [String]!,placeholder: String!, segmentedControl: UISegmentedControl?, cellHeight: CGRect, cellWidth: CGRect) {
self.dataObject = dataObject
self.Placeholder.text = placeholder
self.objectAttributeValues = objectAttributeValues
if segmentedControl != nil {
self.segmentedControl = segmentedControl!
didHaveSegmentedControl = true
}
}
required init(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
我试着调用super.init(frame:CGRect(...))但是通过实现这个我得到另一个错误:必须调用超类“UITableViewCell”的指定初始化器
我能做什么?非常感谢!
答案
初始化程序的工作方式是,它们将自己的属性,常量和函数添加到该实例,然后回调超类以获取其类型的对象。更多信息here。
因此,您必须在退出初始化程序之前调用超类的初始化程序。在这里,我建议你在初始化的最后一行打电话给super.init()
。您可以选择init
中哪种UITableViewCell
方法最合适。
另一答案
override init(frame: CGRect) {
super.init(frame: frame)
}
convenience init(frame: CGRect, dataObject: [NSManagedObject]!, objectAttributeValues: [String]!,placeholder: String!, segmentedControl: UISegmentedControl?, cellHeight: CGRect, cellWidth: CGRect){
self.init(frame: frame)
self.dataObject = dataObject
self.Placeholder.text = placeholder
self.objectAttributeValues = objectAttributeValues
if segmentedControl != nil {
self.segmentedControl = segmentedControl!
didHaveSegmentedControl = true
}
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
我希望这会帮助你Override init method of UIView in swift
另一答案
您必须调用超类指定的初始化程序。
例如,我试图创建一个UIView
的子类,并遇到了完全相同的问题。 UIView
的指定初始化程序是super.init(frame: CGRect)
对于UITableViewCell
,指定的初始化程序如下。
// Designated initializer. If the cell can be reused, you must pass in a reuse
identifier. You should use the same reuse identifier for all cells of the same
form.
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:
(nullable NSString *)reuseIdentifier NS_AVAILABLE_ios(3_0)
NS_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder
NS_DESIGNATED_INITIALIZER;
希望这有帮助。
以上是关于从初始化程序返回之前不会调用Super.init的主要内容,如果未能解决你的问题,请参考以下文章
在从初始化程序返回之前,不会在所有路径上调用 super init