Один протокол использования и один использование статической функции.Какой из них лучше?
Это совершенно разные вещи, поэтому используйте тот, который делает то, что вам нужно:
протокол: Протокол определяет одинили больше функций, которые будут реализованы любым классом, который принимает этот протокол.Ваш class A
принимает protocol B
, поэтому вы можете передать экземпляр A
любому методу, для которого требуется объект, соответствующий B
.Могут быть классы C
, D
и E
, которые также принимают протокол B
, и в этом случае вы также можете передавать экземпляры любого из этих классов в тот же метод.
статическая функция: Статическая функция похожа на метод класса в Objective-C, то есть вы можете вызывать функцию, не нуждаясь в экземпляре класса, которому она принадлежит.Когда вы говорите B.b()
в своем первом примере, вы делаете именно это - вызываете b()
без экземпляра из B
.
Приведенных вами примеровнастолько просты, что не понятно, что вы пытаетесь сделать, поэтому трудно сказать, что одно лучше другого.Однако при реальном использовании вы вряд ли их перепутаете.Рассмотрим, например, UITableViewDataSource
: это протокол, который определяет интерфейс, которому должен соответствовать объект, выступающий в качестве источника данных для таблицы.Не имеет смысла пытаться делать это со статическими функциями - суть в том, что таблица не знает, какой должна быть реализация функций, подобных numberOfSections(in:)
, но ей нужно знать, какую функцию вызывать вобъект источника данных.