Overriding method with selector 'touchesBegan:withEvent:' has incompatible type '(NSSet, UIEvent) -> ()' Overriding method with selector 'touchesBegan:withEvent:' has incompatible type '(NSSet, UIEvent) -> ()' ios ios

Overriding method with selector 'touchesBegan:withEvent:' has incompatible type '(NSSet, UIEvent) -> ()'


Swift 1.2 (Xcode 6.3) introduced a native Set type that bridgeswith NSSet. This is mentioned in the Swift blog and in theXcode 6.3 release notes, but apparently not yet added to the official documentation (update: As Ahmad Ghadiri noted, it is documented now).

The UIResponder method is now declared as

func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent)

and you can override it like this:

override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {    if let touch = touches.first as? UITouch {        // ...    }    super.touchesBegan(touches , withEvent:event)}

Update for Swift 2 (Xcode 7): (Compare Override func error in Swift 2)

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {    if let touch = touches.first {        // ...    }    super.touchesBegan(touches, withEvent:event)}

Update for Swift 3:

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {    if let touch = touches.first {        // ...    }    super.touchesBegan(touches, with: event)}


With xCode 7 and swift 2.0, use following code:

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {    if let touch =  touches.first{        print("\(touch)")    }    super.touchesBegan(touches, withEvent: event)}override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {    if let touch = touches.first{        print("\(touch)")    }    super.touchesEnded(touches, withEvent: event)}override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) {    if let touch = touches.first{        print("\(touch)")    }    super.touchesMoved(touches, withEvent: event)}


Using Swift 3 and Xcode 8

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {}override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {}override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {}override func touchesCancelled(_ touches: Set<UITouch>?, with event: UIEvent?) {// Don't forget to add "?" after Set<UITouch>}