2015-10-12 1 views
0

Le moulage fonctionne très bien pour les fonctions par exemple.Comment désambiguïsez-vous entre les méthodes statiques des protocoles implémentés?

protocol Protocol1 {} 
extension Protocol1 { 
    func instanceFunc() {} 
    static func staticFunc() {} 
} 

protocol Protocol2 {} 
extension Protocol2 { 
    func instanceFunc() {} 
    static func staticFunc() {} 
} 

struct Struct: Protocol1, Protocol2 { 
    func instanceFunc() { 
     (self as Protocol1).instanceFunc() 
     (self as Protocol2).instanceFunc() 
    } 

    static func staticFunc() { 
     // My best guess. Nope! 
     (Struct as Protocol1.Type).staticFunc() 
     (Struct as Protocol2.Type).staticFunc() 
    } 
} 
+0

Voir http://stackoverflow.com/questions/31586864/swift-2-0-protocol-extensions-two-protocols-with-the- same-function-signature-c – Knight0fDragon

+0

Je comprends cela, ainsi que les protocoles ont une crise d'identité quant à savoir s'ils représentent l'interface d'un objet, ou une certaine personnalité de celui-ci, mais étant donné que la personnalité peut être sélectionnée manuellement par exemple fonctions, il devrait en être de même pour les whatevers statiques. – Jessy

+0

Je pense qu'il vous manque le fait que Struct n'est pas un objet, mais que vous essayez de lancer tel quel. Obtenez-vous une erreur comme appel de constructeur après que le nom de type est attendu? – Knight0fDragon

Répondre

1

cela devrait faire le second tour de

protocol Protocol1 {} 
extension Protocol1 { 
    func instanceFunc() {} 
    static func staticFunc() {} 
} 

protocol Protocol2 {} 
extension Protocol2 { 
    func instanceFunc() {} 
    static func staticFunc() {} 
} 

struct Struct: Protocol1, Protocol2 { 
    func instanceFunc() { 
     (self as Protocol1).instanceFunc() 
     (self as Protocol2).instanceFunc() 
    } 

    static func staticFunc() { 
     (Struct.self as Protocol1.Type).staticFunc() 
     (Struct.self as Protocol2.Type).staticFunc() 
    } 
} 
+0

J'aurais pu jurer d'avoir essayé ça; je ne pense pas! Bon travail! Qui es-tu? Je voudrais suivre vos allées et venues. – Jessy

+0

Content de pouvoir aider! J'ai peur qu'il n'y ait pas grand chose à suivre, j'essaie juste d'aider les gens ici et parfois sur le subreddit de swift. Jetez-moi un message privé là-bas si vous avez besoin de quoi que ce soit. – Gulypy