[Swift]fonction qui retourne une classe conforme à  un protocol

Bonjour,


 


J'ai la fonction suivante en Objective-C :




- (UIView<MyUIViewProtocol> *) createTestView {
//selon parametre interne, return une extension MyScrollView, MyWebView, etc. qui implemente mon protcole

}

et j'aimerai trouver l'équivalent en swift, du genre :


 


func createTestView() ->UIView:MyUIViewProtocol {...}


 


Seriez-vous si c'est possible en swift ?


Merci.


 


D.H.


Réponses

  • PyrohPyroh Membre
    janvier 2016 modifié #2

    À ma connaissance tu ne peut pas faire ce que tu veux faire. Par contre tu peux faire quelque chose du genre:



    public protocol MyUIViewProtocol {
    // Implémentation
    }

    public func createTestView() -> MyUIViewProtocol {
    // Implémentation
    }

    En fait en Swift les protocols sont considérés comme des types.


    Là  on part du principe que tu veux renvoyer un objet conforme au protocole MyUIViewProtocol sans pour autant être sur qu'il extends UIView.


     


    Si par derrière il tu veux l'UIView tu peux faire un truc du genre :



    if let view = createTestView() as? UIView {
    // Ce que tu as à  faire avec view
    }

    Donc, oui, un cast.


  • J'ai passé quelques heure à  chercher en vain ; dommage.


     


    Merci de l'info.


  • FKDEVFKDEV Membre
    janvier 2016 modifié #4
    Tu peux ajouter dans ton protocole une fonction qui renvoie l'objet UIView associé à  l'objet qui implémente le protocole, ce dernier peut être la vue elle-même mais pas forcément.


    protocol InteractiveArea
    {
    var tapable:UIView? { get }
    var draggable:UIView? { get }
    }
Connectez-vous ou Inscrivez-vous pour répondre.