Swift: невозможно переопределить операциюDidFinish из класса GroupOperation

В пользовательском подклассе GroupOperation я пытаюсь переопределить operationDidFinish(). Когда я пытаюсь реализовать функцию в своем подклассе, я получаю это сообщение об ошибке:

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

Если я удалю ключевое слово override, я получу

Метод «operationDidFinish(:withErrors:)» с селектором Objective-C «operationDidFinish:withErrors:» конфликтует с методом «operationDidFinish(:withErrors:)» из суперкласса «GroupOperation» с тем же селектором Objective-C

Странность. Я почти уверен, что сигнатура моего метода точна, и я не пытаюсь перегрузить метод obj-c, так что все должно быть хорошо. Что дает?

Для справки, мой класс выглядит так:

class ServerAuthenticationOperation: GroupOperation {

     // properties... initializer stuff...

     override func operationDidFinish(operation: NSOperation, withErrors errors: [NSError]) {
          print("I finished!")
     }
}

person corykon    schedule 18.12.2015    source источник


Ответы (1)


Я предполагаю, что вы используете Swift 2.

Objective-C не поддерживает перегрузку методов, поэтому вам нужно выбрать другое имя для вашего метода. Или вы можете попробовать следующие варианты:

  1. Переименуйте метод, используя @objc(newMethodName:)
  2. Используйте @nonobjc

Редактировать: кажется, работает для предоставленного вами репо, вы можете проверить его здесь. https://www.dropbox.com/s/hb07u3hyjhjuews/OverrideTest.zip?dl=0

person emrekyv    schedule 19.12.2015
comment
На самом деле я пытаюсь переопределить функцию из быстрого класса. См. исходный код этого класса здесь: github.com/pluralsight/PSOperations/ блоб/мастер/PSOperations/ - person corykon; 19.12.2015
comment
Странный. Я клонировал репо и без проблем добавил ваш метод. - person emrekyv; 19.12.2015
comment
черт. Поиграюсь еще, может еще что-то не так сделал. спасибо за проверку - person corykon; 19.12.2015