Ответ 1
Протоколы в Swift очень похожи на Objc, за исключением того, что вы можете использовать их не только для классов, но и для структур и перечислений.
protocol SomeProtocol {
var fullName: String { get } // You can require iVars
class func someTypeMethod() // ...or class methods
}
В соответствии с протоколом несколько отличается:
class myClass: NSObject, SomeProtocol // Specify protocol(s) after the class type
Вы также можете расширить протокол с помощью реализации функции по умолчанию (переопределяемой):
extension SomeProtocol {
// Provide a default implementation:
class func someTypeMethod() {
print("This implementation will be added to objects that adhere to SomeProtocol, at compile time")
print("...unless the object overrides this default implementation.")
}
}
Примечание: реализация по умолчанию должна быть добавлена через расширение, а не в самом определении протокола - протокол не является конкретным объектом, поэтому он не может иметь приложения метода. Подумайте о реализации по умолчанию в качестве шаблона C-стиля; по сути, компилятор копирует декларацию и вставляет ее в каждый объект, который придерживается протокола.