Les controls d'accès des fonctions

Bonjour,


 


J'ai un souci de comprehension sur Swift et les "controls d'accès" des fonctions.


 


La doc :


 


The access control level of a type also affects the default access level of that type's members (its properties, methods, initializers, and subscripts). If you define a type's access level as private, the default access level of its members will also be private. If you define a type's access level as internal or public (or use the default access level of internal without specifying an access level explicitly), the default access level of the type's members will be internal.”

 





Function Types

The access level for a function type is calculated as the most restrictive access level of the function's parameter types and return type. You must specify the access level explicitly as part of the function's definition if the function's calculated access level does not match the contextual default.”

 



 


Exemple :





public struct PublicStruct {} 




private struct PrivateStruct {
   func someFunc(privateParam : PublicStruct) {}
}

Ce que j'ai compris de la documentation:  


 


someFunc est un membre du type PrivateStruct donc son type par défaut est privé. 


 


Le contre d'accès de la fonction se déduit du control d'accès du type le plus restrictif des ses paramètres et type de retour, ici la fonction a un seul paramètre avec accès public ---> le control d'accès de la fonction est publique.


 



> Puisque les deux accès sont différent, on doit spécifier explicitement le control d'accès de la fonction.  

 


le problème ici c'est que je n'ai rien spécifier pour la fonction et le code compile bien.


 


Ai-je mal compris ?


 


 


 


 


 


 



 


Mots clés:

Réponses

  • Joanna CarterJoanna Carter Membre, Modérateur
    Oui. La fonction reste privé, car c'est plus restrictif que le paramètre.
  • @Joanna C'est pas ce que j'ai compris de la documentation. 


     


    You must specify the access level explicitly as part of the function's definition if the function's calculated access level does not match the contextual default.”

     



     


    "The function's calculated access level" : C'est publique puisque elle a un paramètre public.


    " the contextual default." : C'est privé puisque la fonction est définie dans une structure privée. 


     


    Donc les deux ne correspondent pas, il faut spécifier explicitement le control d'accès de la fonction. or le code compile.

  • Joanna CarterJoanna Carter Membre, Modérateur


    "The function's calculated access level" : C'est publique puisque elle a un paramètre public.


    " the contextual default." : C'est privé puisque la fonction est définie dans une structure privée. 


     


    Donc les deux ne correspondent pas, il faut spécifier explicitement le control d'accès de la fonction. or le code compile.




     



     


    Function Types


    The access level for a function type is calculated as the most restrictive access level of the function's parameter types and return type. You must specify the access level explicitly as part of the function's definition if the function's calculated access level does not match the contextual default.”


     


    Tu as tort  :-*  Le niveau d'accès de la fonction est privé mais ça n'empêche de passer les paramètres d'un type publique.


     


    Le type du renvoi est Void ; du coup, ça n'a aucun effet sur le niveau d'accès de la fonction.


     


    Imagines que tu veux avoir une fonction privée dans une classe ou structure qui doit accéder un type d'un framework externe... la fonction peut rester privée mais le type du paramètre doit être publique pour que l'on puisse le voir dehors le framework.

  • Je pense que nous parlons de deux choses différentes. Y a un problème dans la documentation ou camèrent  un bug au niveau du language. 


     


    Le bout de code que j'ai mis ne doit pas compiler selon la documentation, j'ai pas analysé si c'est logique ou pas cette construction, c'est un autre sujet.

  • Joanna CarterJoanna Carter Membre, Modérateur


    Je pense que nous parlons de deux choses différentes. Y a un problème dans la documentation ou camèrent  un bug au niveau du language. 




     


     


    Tu crois ? peux-tu préciser où ?


     




    Le bout de code que j'ai mis ne doit pas compiler selon la documentation, j'ai pas analysé si c'est logique ou pas cette construction, c'est un autre sujet.





    public struct PublicStruct {}


    private struct PrivateStruct
    {
    func someFunc(privateParam : PublicStruct) {}
    }

    La première struct est publique.


     


    La deuxième struct est privée.


     


    Bien que le paramètre est d'un type public, la fonction reste privée.


     



     


    Function Types


    The access level for a function type is calculated as the most restrictive access level of the function's parameter types and return type. You must specify the access level explicitly as part of the function's definition if the function's calculated access level does not match the contextual default.”


     


    Le niveau d'accès d'une fonction, c'est le plus restrictif des types qui se trouvent dans la fonction i.e. privée.


     


    Je ne peux pas trouver aucun problème ni avec les docs, ni avec le compilateur

Connectez-vous ou Inscrivez-vous pour répondre.