在OOP-Swift中调用父对象
模型中有两个类。我在视图控制器上调用了这两个函数。问题是,当我想在父类上使用print时,它不起作用 这是视图控件中的父类和子类:在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) {
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")
}
}
如果您想扩展超类的功能,然后包括对重写方法的调用,那么可以这样想,但是如果您想替换超类中的功能,那么就不包括对超类的调用谢谢您,这样就行了。