web-dev-qa-db-fra.com

Quel est l'équivalent pour Java interfaces ou protocoles Objective C dans swift?

J'ai cherché le nouveau langage Swift en essayant de trouver l'équivalent d'une interface (en Java) ou d'un protocole (en objectif-c) dans Swift, après avoir navigué sur Internet et en cherchant dans le livre fourni par Apple, je n'arrive toujours pas à le trouver.

Quelqu'un sait-il quel est le nom de ce composant dans Swift et quelle est sa syntaxe?

30
Martin Cazares

Les protocoles dans Swift sont très similaires à Objc, sauf que vous pouvez les utiliser non seulement sur les classes, mais aussi sur les structures et les énumérations.

protocol SomeProtocol {
     var fullName: String { get } // You can require iVars
     class func someTypeMethod() // ...or class methods
}

La conformité à un protocole est un peu différente:

class myClass: NSObject, SomeProtocol // Specify protocol(s) after the class type

Vous pouvez également étendre un protocole avec une implémentation de fonction par défaut (remplaçable):

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.")
      }
}

Remarque: les implémentations par défaut doivent être ajoutées via l'extension, et non dans la définition de protocole elle-même - un protocole n'est pas un objet concret, il ne peut donc pas avoir de corps de méthode attachés. Considérez une implémentation par défaut comme un modèle de style C; essentiellement le compilateur copie la déclaration et la colle dans chaque objet qui adhère au protocole.

46
cdstamper

Swift a également des protocoles, ici est la documentation pertinente:

10