Подтвердить что ты не робот

Ошибка переопределения func в Swift 2

Этот код в XCode 6 не имеет ошибки, но в XCode 7 (Swift 2) эта ошибка произошла:

Метод не отменяет какой-либо метод из его суперкласса

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

}

При удалении слова override произошла эта ошибка:

Метод 'touchhesBegan (: withEvent:)' с Objective-C selector 'touchhesBegan: withEvent: "конфликты с методом" touchhesBegan (: withEvent:) "из суперкласса" UIResponder "с тем же селектором Objective-C

4b9b3361

Ответ 1

Вы получаете первую ошибку, потому что большая часть Cocoa Touch была проверена для поддержки Objective-C generics, что означает, что теперь можно вводить элементы таких вещей, как массивы и наборы. В результате этого подпись этого метода изменилась, и поскольку то, что вы написали, больше не соответствует этому, вам предоставляется ошибка, объясняющая, что вы пометили метод как override, но на самом деле это не соответствует любые методы из суперкласса.

Затем, когда вы удаляете ключевое слово override, ошибка, которую вы получаете, дает вам знать, что вы создали метод с конфликтующим селектором Objective-C с использованием метода начальных касаний (в отличие от Swift, Objective-C не поддерживает перегрузку метода).

Суть в том, что в Swift 2 ваши прикосновения начали отменяться, должно выглядеть так.

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

Для получения дополнительной информации о том, что означает Использование Swift с параметрами Cocoa и Objective-C. На данный момент на страницах 33 и 34.

Ответ 2

Просто удалите переопределить, он будет работать.

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

}