Dans Swift, comment définir un protocole qui étend ou spécialise un protocole de base? La documentation ne semble pas le clarifier.
Aussi peu clair, les protocoles Swift se conforment-ils/étendent-ils le protocole NSObject? C'est une question intéressante car elle indiquerait si Swift utilise vtable- ou message- répartition basée sur les méthodes de protocole d'appel.
L'héritage de protocole utilise la syntaxe d'héritage régulière dans Swift.
protocol Base {
func someFunc()
}
protocol Extended : Base {
func anotherFunc()
}
Les protocoles Swift ne sont pas par défaut conformes à NSObjectProtocol. Si vous choisissez de faire en sorte que votre protocole soit conforme à NSObjectProtocol, vous limitez votre protocole à être utilisé uniquement avec des classes.
La syntaxe est la même que si vous déclariez une classe héritée d'une superclasse.
protocol SomeProtocol { }
protocol SomeOtherProtocol: SomeProtocol { }
Et non, ils ne le font pas. Si vous souhaitez que votre protocole soit également conforme à NSObjectProtocol, vous pouvez fournir plusieurs protocoles pour que votre nouveau protocole soit conforme à ceci.
protocol SomeOtherProtocol: SomeProtocol, NSObjectProtocol { }