Вызов родителя в ООП Свифт - PullRequest
0 голосов
/ 21 октября 2019

В модели есть два класса. Я назвал оба из них на контроллере представления. Вопрос в том, когда я хочу использовать print в родительском классе, он не работает?

это мой родительский и дочерний класс в контроллере представления:

     class shape {

        var area : Double?

        func calculateArea(valA: Double, valB :Double) {
            print("a")
        }

         func calculateArea(valA: Double) {

              print("b")
           }

        func save()

        {

        }

    }

class Triangle : shape {

    override func calculateArea(valA: Double) {
        print("c")
    }

}


class Rectangle : shape {

    override func calculateArea(valA: Double, valB: Double) {
        print("d")
    }

}

это то, что я называюв контроллере представления:

  var triangle : Triangle!

  var rectangle : Rectangle!

    override func viewDidLoad() {

        super.viewDidLoad()

        triangle = Triangle()
  triangle.calculateArea(valA: 1.0)
        triangle.area = 12;
        triangle.save();


        rectangle = Rectangle()
        rectangle.calculateArea(valA: 2.3, valB: 1.2)
        rectangle.area = 23.5
        rectangle.save()
}

Когда я запускаю его, «a» и «b» не печатаются в родительском классе, но «c» и «d» печатаются правильно.

Ответы [ 2 ]

3 голосов
/ 21 октября 2019

Вам необходимо вызвать супер метод из переопределяющего метода, например

class Triangle : shape {
    override func calculateArea(valA: Double) {
        super.calculateArea(valA: valA)
        print("c")
    }
}

Думайте об этом, как будто вы хотите расширить функциональность суперкласса, а затем включить вызовпереопределенный метод, но если вы хотите заменить функциональность в суперклассе, тогда вы не включаете вызов супер

1 голос
/ 21 октября 2019

Ты забыл позвонить супер. Это должно работать:

override func calculateArea(valA: Double) {
    super.calculateArea(valA)
    print("c")
}

override func calculateArea(valA: Double, valB: Double) {
    super.calculateArea(valA, valB)
    print("d")
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...