Можешь объяснить основные принципы протокол-ориентированного программирования в Swift и чем это отличается от традиционного подхода на основе наследования? — ДейлиПреп