Swift,super.init()必须调用超类'UIView'错误的指定初始值设定项

Ebe*_*uce 19 iphone ios swift

我是Swift的新手.我继承了一个项目.我看到它在设备上运行.但是,当我签出代码时,它有很多错误.我能够清除错误.但是,我遇到了令我困惑的这一个.该项目也使用xib文件.这是代码.

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

    override init(frame: CGRect) {
        super.init(frame: frame)
    }

   init(items:NSArray, viewController:AnyObject){
        super.init()
        //itemsArray = items
        itemsArray = items as [AnyObject]
        //commonInit(viewController as UIViewController)
        commonInit(viewController as! UIViewController)
    }
Run Code Online (Sandbox Code Playgroud)

我在init(items:NSArray,viewController:AnyObject)方法/函数下得到错误.错误指向"super.init()".它声明"必须调用超类'UIView'错误的指定初始值设定项"

我一直在搜索,谷歌搜索,问别人,什么都没有出现.我可以获得有关修复此错误的帮助,或者至少为什么会出现此错误?我想了解所以我可以成为一个更好的软件开发人员.

编辑:我要感谢大家的见解和帮助.我发现问题更大了.我做了super.init(frame:CGRect)中建议的更改.我不得不更改一个影响init函数的数组属性.

The*_*Tom 13

正如错误消息所示,您只能调用超类的指定初始值设定项.

要解决这个问题,你需要调用:super.init(frame: frame)而不是super.init()


Tom*_*min 8

UIView指定的初始化程序是:

init(frame: CGRect)
init(coder aDecoder: NSCoder)
Run Code Online (Sandbox Code Playgroud)

您正在调用super.init()哪个是从其超类继承的初始化程序NSObject.正如编译器所建议的那样,使用其中一个初始化程序.

  • 这个答案实际上没有提供比错误消息更多的信息. (35认同)
  • 同意@shieldstroy (3认同)