web-dev-qa-db-fra.com

Override func error in Swift 2

Ce code dans XCode 6 n'a pas d'erreur mais dans XCode 7 (Swift 2) cette erreur s'est produite:

La méthode ne remplace aucune méthode de sa superclasse

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

}

Lorsque supprimer override Word, cette erreur s'est produite:

Méthode 'touchesBegan (: withEvent :)' avec le sélecteur Objective-C 'touchesBegan: withEvent:' entre en conflit avec la méthode 'touchesBegan (: withEvent :)' de la superclasse 'UIResponder' avec le même sélecteur Objective-C

42
nmokkary

Vous obtenez votre première erreur car une grande partie de Cocoa Touch a été auditée pour prendre en charge les génériques Objective-C, ce qui signifie que des éléments tels que des tableaux et des ensembles peuvent maintenant être saisis. À la suite de cela, la signature de cette méthode a changé et puisque ce que vous avez écrit ne correspond plus à cela, vous recevez une erreur expliquant que vous avez marqué une méthode comme override mais cela ne fonctionne pas ' ne correspond en fait à aucune méthode de la super classe.

Ensuite, lorsque vous supprimez le mot clé override, l'erreur que vous obtenez est de vous faire savoir que vous avez créé une méthode qui a un sélecteur Objective-C en conflit avec la méthode réelle de touches de début (contrairement à Swift, Objective- C ne prend pas en charge la surcharge de méthode).

En fin de compte, en Swift 2, vos touches ont commencé la substitution devrait ressembler à ceci.

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

Pour plus d'informations sur la signification des génériques Objective-C pour votre code Swift, je vous suggère de consulter la section Génériques légers dans la version préliminaire de tilisation de Swift avec Cocoa et Objective-C . A partir de maintenant aux pages 33 et 34.

77
Mick MacCallum

Supprimez simplement le override cela fonctionnera.

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

}
2
Swift Developer