从超类中重写方法

时间:2015-09-26 16:14:36

标签: swift override

我收到了这个Swift错误:

  

Method不会覆盖其超类中的任何方法!

为什么会出现这种情况?相关代码如下:

class TouchyView: UIView {

override func touchesBegan(touches: NSSet?, withEvent event: UIEvent) {
    updateTouches(event.allTouches())
}
override func touchesMoved(touches: NSSet?, withEvent event: UIEvent) {
    updateTouches(event.allTouches())
}
override func touchesEnded(touches: NSSet?, withEvent event: UIEvent) {
    updateTouches(event.allTouches())
}
override func touchesCancelled(touches: NSSet!!, withEvent event: UIEvent) {
    updateTouches(event.allTouches())
}

var touchPoints = [CGPoint]()

func updateTouches( touches: NSSet? ) {
    touchPoints = []
    touches?.enumerateObjectsUsingBlock() { (element,stop) in
        if let touch = element as? UITouch {
            switch touch.phase {
                case .Began, .Moved, .Stationary:
                    self.touchPoints.append(touch.locationInView(self))
                default:
                    break
            }
        }
     }
    setNeedsDisplay()
}

1 个答案:

答案 0 :(得分:1)

继承:如果你有一个带方法的类

class myClass {

func abc () {
   // do something
}

你创建了另一个继承自第一个的类:

class myOtherClass :myClass {

// do whatever stuff in this class

}

第二个类也将拥有第一个类的abc方法。 但是,如果您希望在第二个类中更改abc的功能,则必须使用

  

倍率

关键字。

class myOtherClass :myClass {

override func abc () {
    // do something else
}


// do whatever stuff in this class

}

很好,swift让你添加覆盖关键字,你不会意外地覆盖第一个类的方法(如果名称非常通用,通常会发生这种情况)。

如果方法在第一个类中不存在,则不能使用覆盖(并且它没有用)。这就是你的情况。

希望这有帮助,如果不清楚,我建议你阅读一本关于面向对象编程的书