相关疑难解决方法(0)

从初始化程序返回之前不会调用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")
}
Run Code Online (Sandbox Code Playgroud)

我试着调用super.init(frame:CGRect(...))但是通过实现这个我得到另一个错误:必须调用超类"UITableViewCell"的指定初始化器

我能做什么?非常感谢!

error-handling uitableview ios xcode7 swift2

14
推荐指数
1
解决办法
2万
查看次数

'在super.init初始化self'之前在方法调用中使用self,不能通过方法调用初始化属性

我很好奇,无论如何,在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)

init instance-variables swift

13
推荐指数
1
解决办法
1万
查看次数