Добавление к выше ответа
Протокол представляет собой интерфейс, в котором подпись методов и свойств объявляются и любой класс/структура/перечисление подклассов перечисления должны подчиняться договора означает, что они должны выполнять все методы и свойства, объявленные в протоколе суперкласса.
Причина использовать протокол
Классы обеспечивают одиночное наследование и не-структуру поддержки наследования. Таким образом, были введены протоколы.
Расширение Методы, объявляемые внутри протокола, могут быть реализованы внутри расширения, чтобы избежать избыточности кода в случае, если протокол наследуется в нескольких классах/структурах, имеющих такую же реализацию метода. Мы можем вызвать метод, просто объявив объект struct/enums. Даже мы можем ограничить расширение списком классов, только ограниченный класс сможет использовать метод, реализованный внутри расширения, в то время как остальным классам необходимо реализовать метод внутри собственного класса.
Пример
protocol validator{
var id : String{ get }
func capitialise()-> (String)
}
extension validator where Self : test{
func capitialise() -> String{
return id.capitalized
}
}
class test : validator {
var id: String
init(name:String) {
id = name
}
}
let t = test(name: "Ankit")
t.capitialise()
Когда использовать В OOPS предположим, у нас есть базовый класс автомобиля, который наследуется от самолета, на велосипеде, автомобиле и т.д. Здесь перерыв, ускорение может быть распространенным методом среди трех подкласса, но не летающего метода самолета. Таким образом, если мы объявляем метод flyable также в OOPS, подкласс велосипеда и автомобиля также обладает унаследованным летучим методом, который бесполезен для этих классов. Таким образом, в POP мы можем объявить два протокола: один для летающих объектов, а другой - для методов разрыва и ускорения. И доступный протокол может быть ограничен только для использования только самолетом
Это (почти) то же, что и [интерфейсное программирование] (https://en.wikipedia.org/wiki/Interface-based_programming), например, в Java , –
@RudyVelthuis Но я не знаю Java! Разве я все еще понял бы это легко? – Honey
Смотреть [Crusty] (https://developer.apple.com/videos/play/wwdc2015/408/) – vadian