Хорошо, я понимаю делегатов. Я озадачен (в смысле языкового дизайна), что в некоторых недавних работах над Swift я встречал делегатов, которые могут быть реализованы только с квалификатором override. В частности, «controlTextDidEndEditing» как NSTextFieldDelegate элемента пользовательского интерфейса NSTextField. (Да, это разработка OS X, а не IOS).
При реализации этого делегата Xcode настаивает на квалификаторе переопределения для функции func. Если это функция «делегата», то какой код / функциональность выше по иерархии я переопределяю и должно ли это меня волновать? Вставка super.controlTextDidEndEditing в реализацию просто приводила к бесконечному циклу. Мое понимание (возможно, ошибочное / неполное) делегата заключалось в том, что он определяет подпись, которой соответствует реализация.
Контекст - это тестовая панель с TextField и Label, помещенными в ViewController, тривиальное тестовое упражнение. Единственный сценарий, к которому я могу прийти, заключается в том, что где-то в иерархии над ViewController какой-то другой класс уже реализует controlTextDidEndEditing, что приводит к требованию переопределения, как только я пытаюсь его реализовать, что означает, что я разрушаю некоторый существующий уровень функциональность. Я экспериментировал с подклассом NSTextField с тем же результатом, что и требовалось «переопределить».
Может ли кто-нибудь продолжить мое образование, объяснив все тонкости этого?
Спасибо,
Алан.