如何将超类实例作为子类实例声明的参数传递?

时间:2018-01-31 02:01:47

标签: swift4

我想传递一个超类实例作为子类声明的参数。例如:

class Dog {
      var bone: Int
      var collar: String

  init(bone: Int, collar: String){
  self.bone = bone
  self.collar = collar
}

class Doggy: Dog {
  var toy: Int

  init(bone: Int, collar: String, toy: Int){
  self.toy = toy
  super.init(bone: Int, collar: String)
  }
}

var Spike = Dog(bone:3, collar:"lol")
var Nik = Doggy(bone:3, collar: "lol", toy: 5)

现在,我想要像

这样的东西,而不是最后一行
var Nik = Doggy(Spike, toy: 5)

有没有简单的方法来实现这一目标? 提前致谢

2 个答案:

答案 0 :(得分:1)

方法重载会对你有所帮助。 你应该处理这些情况。 请参阅此处以供参考:https://www.geeksforgeeks.org/function-overloading-c/ 即,会有不同的初始化方法。

答案 1 :(得分:0)

是的,将另一个init添加到Doggy

convenience init(_ dog: Dog, toy: Int) {
    self.init(bone: dog.bone, collar: dog.collar, toy: toy)
}

你可以打电话

var Nik = Doggy(Spike, toy: 5)