我尝试给我的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")
}
Run Code Online (Sandbox Code Playgroud)
我试着调用super.init(frame:CGRect(...))但是通过实现这个我得到另一个错误:必须调用超类"UITableViewCell"的指定初始化器
我能做什么?非常感谢!
我很好奇,无论如何,在init方法中调用一个方法来设置类的实例属性.基本上我只有一个子类UIView的类,在init中添加一些子视图,其中一些子视图是类的实例变量.
class MyView: UIView {
var collectionView: UICollectionView
convenience init () {
self.init(frame:CGRectZero)
}
override init (frame : CGRect) {
super.init(frame : frame)
addSubviews()
}
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
addSubviews()
}
func addSubviews (){
self.collectionView = UICollectionView()
}
}
Run Code Online (Sandbox Code Playgroud)
现在问题是我在初始化类内部属性之前不能调用super init(属性'self.collectionView'在super.init调用时没有被初始化),但是我也无法调用我的自定义方法来初始化那些变量super.init,因为它不能在初始化之前使用self.我意识到我可以使实例变量可选,但它似乎不太优雅,因为我知道它将始终被初始化(还有更多,这只是一个简化版本).有没有办法在不制作所有实例变量选项的情况下完成此操作?
编辑:
我想最终我的问题是为什么swift dis-allow在调用super.init之前调用一个方法?有什么区别:
override init (frame : CGRect) {
addSubviews()
super.init(frame : frame)
}
final func addSubviews (){
self.collectionView = UICollectionView()
}
Run Code Online (Sandbox Code Playgroud)
和
override init (frame : CGRect) {
self.collectionView = UICollectionView()
super.init(frame : frame)
}
Run Code Online (Sandbox Code Playgroud)