2015-06-17 3 views
42

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

Метод не перекрывает любой метод из суперкласса

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

} 

Когда удалить override слова этой ошибки:

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

ответ

75

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

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

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

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

Для получения дополнительной информации о том, что Objective-C дженерики означает для вашего Swift код, я предлагаю вам взглянуть на раздел Легкие дженериков в предварительной версии Using Swift with Cocoa and Objective-C. На данный момент на страницах 33 & 34.

2

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

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

} 
Смежные вопросы