web-dev-qa-db-fra.com

Comment étendre un protocole en Swift

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.

30
Jasper Blues

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.

43
Connor

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 { }
8
Mick MacCallum