Доповнення @Thomas Schar відповідь. Магія протоколу Swift походить від розширення.
- Протоколи Swift можуть отримати реалізацію через розширення (Swift
2). Інтерфейс Java 8 може мати реалізацію за замовчуванням, але це не можна зробити "заднім числом".
- У Swift ви можете "заднім числом" додати вимоги до протоколу (та
його реалізації, якщо це потрібно) до будь-якого класу чи структури.
- Протоколи Swift не відповідають загальній (тобто <..>) схемі налаштування, а схемі typealias (тобто асоційовані типи). Може бути заплутаним на початку, але може уникнути
"кутової сліпоти" в деяких випадках.
- Swift має розширений тип відповідності шаблонів, що дозволяє бути дуже конкретним щодо того, де і як застосовуються вимоги та розширення протоколу. Це може заплутати, коли виходите з Java, але це має велику силу.
- Швидкий протокол може бути складений для властивості / парама (тобто celebrator: протокол)
Одне, що змушує мене чесати голову пару годин, - це те, що не всі протоколи можна використовувати як типи властивостей. Наприклад, якщо у вас є протокол з typealias, ви не можете безпосередньо використовувати його як тип властивості (це має сенс, коли ви думаєте про це, але, виходячи з Java, ми дійсно хочемо мати властивість типу userDao: IDao).