为什么我现在必须在Swift中覆盖我的init?

时间:2015-10-02 22:14:29

标签: swift initialization override

import Foundation

class Student: NSObject
{
    var name: String
    var year: Int
    var major: String
    var gpa : String

    init(name:String, year:Int, major:String, gpa:String)
    {
        self.name = name
        self.year = year
        self.major = major
        self.gpa = gpa
    }

    convenience init()
    {
        //calls longer init method written above
    }
}

-

错误显示在便利init的线上

  

覆盖声明需要'覆盖'关键字

我已经尝试了谷歌搜索和阅读Swift初始化程序的指南,但似乎他们能够使他们的初始化程序正常而不会覆盖任何东西。

2 个答案:

答案 0 :(得分:4)

initNSObject的指定初始值设定项。如果覆盖它,则必须将其标记为override并调用超类指定的初始化程序。这遵循normal rules for initializer inheritance

答案 1 :(得分:-1)

看起来你的便利初始化程序是空的,这就是你得到错误的原因。例如,如果您将其更改为:

convenience init() {
    self.init(name: "", year: 0, major: "nothing", gpa: "4.0")
}

错误会消失。

我想知道你为什么要设置Student来继承NSObject。对你的班级来说,这看起来并不合适。