如何在Swift 1.0中覆盖UIView初始化程序

str*_*ode 11 uiview ios swift

斯威夫特(1.0)的继承让我疯狂无法相信.我可以相信必须要问一些像这样简单但我无法弄明白的事情.我有我的自定义视图,我希望能够使用init(frame:CGRect)以编程方式创建,并从故事板加载它,在这种情况下应该使用init(coder aDecoder:NSCoder)进行初始化.在这两种情况下,我想调用我的自定义安装方法.像这样:

import UIKit

class CustomView: UIView {

    override convenience init(frame: CGRect) {
        super.init(frame: frame)
        self.myCustomSetup()
    }

    required init(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        self.myCustomSetup()
    }

    func myCustomSetup() {
        self.backgroundColor = UIColor.redColor()
    }
}
Run Code Online (Sandbox Code Playgroud)

这似乎不起作用,从快速文档我明白应该只有一个指定的初始化程序,所有的便利初始化程序调用.在UIView的情况下,这应该是init(编码器aDecoder:NSCoder).然而,我无法创建aDecoder: NSCoder,init(frame: CGRect)我也不能传递nil,因为它不是可选的.我该怎么办 ?我怎样才能覆盖它们?

rob*_*off 6

一个类必须至少有一个指定的初始值设定项.它可能不止一个.

所有你必须做的,使你的代码的工作就是删除关键字convenienceinit(frame: CGRect).

  • 一个类必须至少有一个指定的初始值设定项.它可能不止一个. (2认同)