Протоколы Swift: метод не переопределяет какой-либо метод из своего суперкласса.

Поскольку в Xcode 6 по-прежнему много ошибок со Swift, я не уверен, что это одна из них, или я что-то упускаю. Мой класс использует протокол NSLayoutManagerDelegate. Но кажется невозможным переопределить метод, который мне нужен. Я делаю, как описано в документации:

override func layoutManager(_ aLayoutManager: NSLayoutManager!,
        didCompleteLayoutForTextContainer aTextContainer: NSTextContainer!,
        atEnd flag: Bool) {

    }

Но здесь я получаю сообщение об ошибке: метод не переопределяет какой-либо метод из своего суперкласса. Что я должен делать?


person Vitalii Vashchenko    schedule 24.06.2014    source источник


Ответы (1)


Вы реализуете метод из протокола, да, но это не переопределение. Просто удалите ключевое слово override. Переопределение — это когда ваш суперкласс также реализует этот метод, и вы предоставляете версию, которая заменяет или изменяет поведение реализации суперкласса. Это не то, что здесь происходит.

person Ken Thomases    schedule 24.06.2014
comment
Это не глупый вопрос, потому что автодополнение Xcode 6 поставило для нас переопределение, вызвав путаницу :-) - person Golden Thumb; 23.11.2014
comment
Это позор, так как это означает, что нет проверки времени компиляции, которая гарантирует, что у вас есть правильная подпись... - person MattM; 06.05.2015
comment
Да, я думал, что это плохо, так как нет проверки правильности подписи во время компиляции. Но, поскольку в Swift требуются все методы протокола, вы получите какую-то ошибку компиляции, если не реализовали все необходимые методы. - person DouglasHeriot; 04.12.2015
comment
@DouglasHeriot да, но вы не получите предупреждение, если реализуете методы, определенные в протоколе, но не реализуете сам протокол. - person Jeremy; 01.09.2016