2017-09-14 60 views
0

我测试了Swift 3中的继承并且遇到了意外的错误。无论如何改变super.init()调用,我都无法使错误跟踪的问题比这更少。swift 3.1.1错误额外的参数'{property}'在调用

我已阅读过这里的文档和其他类似帖子,但他们没有任何这个特定问题的例子。我正在尝试创建一个具有变量或常量属性的类,然后创建另一个继承自第一个类并添加新属性的类。

错误来自我的子类的init函数:我先设置新的属性,然后用超类的适当参数调用super.init()。斯威夫特然后告诉我,第三个参数“生日”是一个“额外的论点”。

在我的超类有三个属性和我的子类有两个之间存在某种问题?我想不出任何其他可能会导致此类错误的问题。不知道哪个部分让我感到困惑。

这里是我的代码:

class Person { 
    var name: String 
    var age: Int 
    let birthday: String 

    init(name: String, age: Int, birthday: String) { 
     self.name = name 
     self.age = age 
     self.birthday = birthday 
    } 
} 

class Student: Person { 
    var isEnrolled: Bool 
    var numberOfClasses: Int 

    init(isEnrolled: Bool, numberOfClasses: Int) { 
     self.isEnrolled = isEnrolled 
     self.numberOfClasses = numberOfClasses 
     super.init(name: name, age: age, birthday: birthday) { 
      self.name = name 
      self.age = age 
      self.birthday = birthday 
     } 
    } 
} 

回答

0

您的初始化没有关闭,所以很自然,你的做法是行不通的。它说birthday是一个额外的参数,因为(不存在的)闭包是列表中的第四个参数。

Student的初始化不知道什么nameagebirthday是。您还应该在初始化程序中包含这些参数,最后请致电super.init

init(name: String, age: Int, birthday: String, isEnrolled: Bool, numberOfClasses: Int) { 
    self.isEnrolled = isEnrolled 
    self.numberOfClasses = numberOfClasses 

    super.init(name: name, age: age, birthday: birthday) 
} 
相关问题