Вы должны делегаты
Независимо от того, если вы создаете некоторые из ваших собственных, вы не получите вокруг их использования - они везде встроенные.
И да, вы могли бы просто определить функцию в viewController и вызвать ее, но тогда вызывающий объект этого метода должен теперь иметь дело с viewController, и ничего ему не очень-то нужно. Все, о чем он заботится, это тот факт, что есть/должна быть функция под названием showName
.
Если вы собираетесь передавать данные вперед, вам не обязательно использовать делегирование, поскольку вы знаете, куда будете передавать данные. Но если вы хотите передать данные назад, вы обычно не знаете, откуда пришли ->second controller
не знает и должен не знал, что он был представлен first view controller
. Он должен работать одинаково, независимо от того, где он был представлен. И тот, кто чувствует ответственность за него, может и должен назначать себя делегатом, который получает информацию об изменениях или обратных вызовах или что-то еще.
Подклассификация, о которой вы упоминаете, в основном такова, но вы можете только подкласс один раз, поэтому, если вы хотите, чтобы ваш класс был делегатом для TableView, CollectionView и вашего CustomView, у вас будет плохое время с только подклассом , То, что вам нужно будет использовать, - это делегирование через protocols
Обратите внимание, что Swift не допускает множественное наследование, поэтому субклассификация обычно используется только для классов UIKit/Foundation подкласса. Приступая к форме C#, вы используете ориентированное на объект программирование, ООП, тогда как в быстрых (помимо функциональных возможностей) мы используем слабо ориентированное по протоколу программирование. Что касается интерфейсов и делегатов: я бы сказал, что Swift для интерфейсов - это * протоколы *, а сами протоколы часто используются для предоставления обратных вызовов делегатов между различными контроллерами/моделями. Однако протоколы также широко используются в приложениях, не являющихся делегатами. – dfri