Junior — Middle
Comment peut-on implémenter des fonctions optionnelles dans des interfaces ou des protocoles?
sobes.tech IA
Réponse de l'IA
В Swift интерфейсы реализуются через протоколы, и по умолчанию все методы протокола обязательны для реализации. Чтобы сделать методы необязательными, можно использовать протоколы с атрибутом @objc и объявлять методы как @objc optional. Это требует, чтобы протокол наследовался от NSObjectProtocol и чтобы класс, реализующий протокол, был классом Objective-C (наследовался от NSObject).
Пример:
@objc protocol MyDelegate: NSObjectProtocol {
@objc optional func optionalMethod()
func requiredMethod()
}
class MyClass: NSObject, MyDelegate {
func requiredMethod() {
print("Обязательный метод")
}
// optionalMethod можно не реализовывать
}
Если использовать чисто Swift-протоколы без @objc, то необязательные методы можно эмулировать через расширения протоколов, предоставляя дефолтные реализации. Тогда реализация метода становится необязательной:
protocol MyProtocol {
func optionalMethod()
}
extension MyProtocol {
func optionalMethod() {
// дефолтная реализация
}
}
class MyClass: MyProtocol {
// можно не реализовывать optionalMethod, будет использоваться дефолтная
}