Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在OOP-Swift中调用父对象_Swift_Xcode_Oop - Fatal编程技术网

在OOP-Swift中调用父对象

在OOP-Swift中调用父对象,swift,xcode,oop,Swift,Xcode,Oop,模型中有两个类。我在视图控制器上调用了这两个函数。问题是,当我想在父类上使用print时,它不起作用 这是视图控件中的父类和子类: class shape { var area : Double? func calculateArea(valA: Double, valB :Double) { print("a") } func calculateArea(valA: Double) {

模型中有两个类。我在视图控制器上调用了这两个函数。问题是,当我想在父类上使用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”打印正确。

您忘记调用super了。这应该起作用:

override func calculateArea(valA:Double){
超级计算器(valA)
打印(“c”)
}
覆盖函数calculateArea(valA:Double,valB:Double){
超级计算器ea(valA,valB)
打印(“d”)
}

您需要从覆盖方法调用super方法,如

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

如果您想扩展超类的功能,然后包括对重写方法的调用,那么可以这样想,但是如果您想替换超类中的功能,那么就不包括对超类的调用

谢谢您,这样就行了。