2015-06-17 12 views
42

ten kod XCode 6 nie ma błędu ale XCode 7 (Swift 2), to wystąpił błąd:Zastąpienie Swift 2

Sposób nie zastępuje żadnej metody z jego nadrzędna

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

} 

Kiedy usuń override słowo wystąpił ten błąd:

Metoda „touchesBegan (: withEvent :)”z Objective-C selektora 'touchesBegan: withEvent:' Konflikty z metody 'touchesBegan (: withEvent :)' z nadklasy 'UIResponder' z tego samego selektora Objective-C

Odpowiedz

75

jesteś pierwszy błąd, ponieważ większość Cocoa Touch została skontrolowana pod kątem obsługi generycznych algorytmów Objective-C, co oznacza, że ​​elementy takie jak tablice i zestawy mogą być teraz wpisywane. W rezultacie zmieniono podpis tej metody, a ponieważ to, co napisałeś, już nie pasuje do tego, pojawia się błąd wyjaśniający, że oznaczono metodę jako override, ale w rzeczywistości nie pasuje ona do żadnej metody od super klasy.

Następnie po usunięciu słowa kluczowego override pojawia się błąd informujący, że wykonano metodę, która ma sprzeczny selektor celu C z metodą prawdziwych dotknięć (w przeciwieństwie do Swift, Objective-C nie obsługuje przeciążania metod).

Najważniejsze jest to, że w Swift 2 Twoje dotknięcia powinny zostać zastąpione.

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

Aby uzyskać więcej informacji na temat tego, co Objective-C rodzajowych znaczy dla Swift Code, proponuję spojrzeć na odcinku Lekkie Generics w wersji wstępnej wersji Using Swift with Cocoa and Objective-C. Od tej pory na stronach 33 & 34.

2

Po prostu usuń nadpisanie , które zadziała.

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

}