2015-06-17 16 views
42

Dieser Code in XCode 6 hat keinen Fehler aber in XCode 7 (Swift 2) dieser Fehler aufgetreten ist:Aufschalten func Fehler in Swift 2

Methode überschreiben, keine Methode aus ihrer Oberklasse

override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) { 
     /* Called when a touch begins */ 

} 

wenn entfernen override Wort dieser Fehler aufgetreten:

‚Method touchesBegan (: withevent :)‘mit Objective-C-Selektor 'touchesBegan: withevent:' Konflikte mit der Methode 'touchesBegan (: withevent :)' von Super 'UIResponder' mit dem gleichen Objective-C-Selektor

Antwort

75

Du bist Sie erhalten den ersten Fehler, weil ein Großteil von Cocoa Touch auditiert wurde, um Objective-C-Generics zu unterstützen, was bedeutet, dass Elemente von Dingen wie Arrays und Sets jetzt getippt werden können. Daher hat sich die Signatur dieser Methode geändert, und da das, was Sie geschrieben haben, nicht mehr übereinstimmt, erhalten Sie einen Fehler, der erklärt, dass Sie eine Methode als override markiert haben, aber keine Methode entspricht von der Superklasse.

Wenn Sie dann das Schlüsselwort override entfernen, werden Sie wissen, dass Sie eine Methode erstellt haben, die einen Zielkonflikt-Selektor mit der echten Berührungsmethode aufweist (im Gegensatz zu Swift, Objective-C) unterstützt das Überladen von Methoden nicht.

Die Quintessenz ist, in Swift 2, sollten Ihre Berührungen Override sollte so aussehen.

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 
    // stuff 
} 

Weitere Informationen darüber, welche Objective-C Generika für Ihren Swift Code bedeuten, empfehle ich Ihnen einen Blick auf den Leichtbau Generics Abschnitt in der Vorabversion von Using Swift with Cocoa and Objective-C. Ab sofort auf den Seiten 33 & 34.

2

Löschen Sie einfach überschreiben es funktioniert.

func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) { 
     /* Called when a touch begins */ 

}