D'appel par défaut du protocole de mise en œuvre de méthode régulière

Je me demandais si il est possible de réaliser une telle chose.

J'ai un terrain de jeu comme ceci:

protocol Foo {
    func testPrint()
}

extension Foo {
    func testPrint() {
        print("Protocol extension call")
    }
}

struct Bar: Foo {
    func testPrint() {
        //Calling self or super go call default implementation
        self.testPrint()
        print("Call from struct")
    }
}


let sth = Bar()
sth.testPrint()

Je peux fournir une implémentation par défaut dans extension mais que faire si Bar besoin de tout ce qui est en défaut de mise en œuvre ainsi que d'autres choses?

C'est en quelque sorte similaire à l'appel super. méthodes de classes pour remplir l'exigence de la mise en œuvre de chaque propriété. mais je ne vois pas de possibilité de réaliser la même chose avec structs.

  • Je voudrais utiliser Foo.testPrint(self)() - le problème, c'est qu'il échoue en raison d'une erreur de segmentation (testé sur deux 7.0 GM et 7.1 bêta)
  • C'est une étrange construction que vous avez présenté 😯
  • Chaque instance est une méthode statique de la méthode en prenant un exemple comme premier paramètre
  • Cependant j'ai essayé de supprimer l'extension, et il jette la même erreur de segmentation. Probablement que ça n'est pas censé travailler avec les protocoles
  • Hmmm, la honte que j'ai à me répéter dans le code si cela peut être facilement résolu en utilisant l'implémentation par défaut...
InformationsquelleAutor cojoj | 2015-09-16