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

Why do I have to override my init in Swift now?

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
    }
}

--

错误显示在便利初始化行

Overriding declaration requires an 'override' keyword

我已经尝试使用谷歌搜索并阅读 Swift 中有关初始化程序的指南,但似乎他们能够在不覆盖任何内容的情况下使他们的初始化程序正常工作。

您的便捷初始化程序似乎是空的,这就是您收到错误的原因。例如,如果您将其更改为:

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

错误会消失。

我想知道你为什么要设置Student继承自NSObject。您的 class.

看起来没有必要

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