Question bête:sur le passage de variables pour des fonctions

Nota34Nota34 Membre
03:40 modifié dans API AppKit #1
Bonjour,

question sans doute bête pour vous, mais je n'ai pas touché à  du C depuis quelques années (10 ans).
Et en plus sur le SDK Iphone cela me semble différent

En fait, je souhaite crééer une fonction pour envoyer des paramètres à  ma fonction mais je ne sais pas comment déclarer cela.

j'ai par exemple essayé de crééer cela pour passer 4 paramètres :
-(void)CalculAbacque(NSInteger *)Distance, (NSString *)Produit, (NS....)  --> ca passe pas
ensuite
-(void)CalculAbacque(NSInteger *Distance), (NSString *Produit) --> ca passe pas non plus


d'avance,

merci. :( :(

Réponses

  • NoNo Membre
    03:40 modifié #2
    En C ou en Objective-C prog objet ?
    Car ce n'est pas la même chose.

    en C :
    <br />void CalculAbacque(NSInteger *Distance, NSString *Produit)<br />
    

    les paramètres sont entre parenthèses et séparés par une virgule.

    en Obj-C :
    <br />-(void)CalculAbacque:(NSInteger *)Distance :(NSString *)Produit<br />
    

    Chaque paramètre est séparé par un 2-point (avec éventuellement un nom devant pour plus de clarté).
  • Nota34Nota34 Membre
    03:40 modifié #3
    En fait voilà  ca que j'ai fait et cela génère des erreurs  :-\\

    Fichier .h
    - (void)CalculAbacque:(NSInteger *):(NSString *):(NSString *):(NSString *);


    Fichier .m

    -(void)calculer:(id)sender
    {
    NSString *Ratio,*typeCalcul;
    NSString *ProduitSelectionne;
    ProduitSelectionne = produitlabelAffiche.text;
    Ratio = rat.text;
    typeCalcul = calc.text;
    SInt32 ValeurSaisie = CFStringGetIntValue(donnee);
    CalculAbacque(ValeurSaisie,ProduitSelectionne,Ratio,typeCalcul);
    }

    -(void)CalculAbacque:Valeur:Produit :RatioProjection:TypeDeCalcul
    {

    }
  • CeetixCeetix Membre
    03:40 modifié #4
    Oulalalalala ^^.
    C'est pas comme ça qu'i faut faire.
    Plutot ainsi :
    - (void)CalculAbacque:(NSInteger *)monEntier :(NSString *)chaine1 :(NSString *)chaine2 :(NSString *)chaine3;
  • Nota34Nota34 Membre
    03:40 modifié #5
    Nickel ça marche merci

    Dernière question, savez vous comment convertir une chaine de caractère en type "float"
    Exemple :
    Je récupère 7.8 en type NSString et je souhaite le convertir en type Float.

    D'avance
    merci.
  • GreensourceGreensource Membre
    mars 2009 modifié #6
    Oui, en fait c'est un peu déroutant au début. Le format général d'une déclaration de fonction est le suivant:
    -(type_retour)nomFonction:(type_1er_param)nom_1er_param etiquette_2nd_param:(type_2nd_param)nom_2nd_param ...etc
    Par exemple:
    -(void)perimeterCircleWithCenter:(NSPoint*)center radius:(NSInteger*)theRadius

    Et dans ce cas on dit que cette fonction s'appelle: perimeterWithCenter:radius:

    Si tu veux plus de doc, c'est par ici!

    [edit]
    Pour float tu fais: float f = [maString floatValue];
    idem, de la doc ici
  • Nota34Nota34 Membre
    03:40 modifié #7
    TOP Merci beaucoup
  • Nota34Nota34 Membre
    03:40 modifié #8
    Arrrrrffffff re-moi ...

    Bizarre, je ne bascule pas sur "CalculAbacque" même avec un point d'arrêt, mon execution n'y va pas  :( Quel boulet  :-\\

    -(void)calculer:(id)sender
    {
    NSString *Ratio,*typeCalcul;
    float ValeurSaisie;
    NSString *ProduitSelectionne;
    ProduitSelectionne = produitlabelAffiche.text;
    Ratio = rat.text;
    typeCalcul = calc.text; 

    ValeurSaisie = [donnee floatValue];
    CalculAbacque : ValeurSaisie :ProduitSelectionne :Ratio :typeCalcul;

    }

    - (void)CalculAbacque:(float *)Valeur :(NSString *)Produit :(NSString *)RatioProjection :(NSString *)TypeDeCalcul
    {
    calc.text = @Dkjhlkjhlkjh;
    }

  • GreensourceGreensource Membre
    03:40 modifié #9
    Heu ça compile ton truc? Parce qu'en objective-C c'est pas du tout comme ça que l'on appel une fonction. Tu devrais vraiment aller lire la doc, ya un une très bonne intro à  L'objective-C, au moins au niveau syntaxe. Il n'y a pas grand chose mais tu vas galèrer sans ça.

    Sinon pour ton souci il faut que tu mettes des "étiquettes" à  chaque paramètre, c'est troublant au début mais sinon on comprend rien. Les étiquettes servent à  comprendre le sens du paramètre que ta fonction utilise. Pour toi par exemple:
    - (void)CalculAbacqueAvecValeur:(float *)laValeur produit:(NSString *)leProduit<br />ratioProjection:(NSString *)leRatioProjection typeDeCalcul:(NSString *)leTypeDeCalcul
    

    C'est très verbeux, mais avec l'habitude c'est tellement plus agréable.

    Ensuite lors de l'appel on comprend beaucoup mieux, ça donne:
    [self CalculAbacqueAvecValeur:ValeurSaisie produit:ProduitSelectionner ratioProjection:Ratio typeDeCalcul:typeCalcul
    

    C'est peut-etre bien pour ça que ta méthode n'est pas appeler, même si je ne comprend pas comment ça peut compiler ton code.
    Pour t'expliquer un peu, la syntaxe d'appel d'une fonction, et le sens est un peu particulier en Objective-C. On dit qu'on "envoie un message à  un objet" et non pas qu'on appel une fonction. Donc ici tu envoies le message CalculAbacqueAvecValeur:produit:ratioProjection:typeDeCalcul à  l'objet self

    ps: Tu devrais éviter de déclarer des variables avec une majuscule, c'est une convention. On réserve les majuscules en début de nom pour les Classes (NSString par exemple).
  • CeetixCeetix Membre
    03:40 modifié #10
    Je n'aurai pas fait mieux comme réponse Greensource ^^
Connectez-vous ou Inscrivez-vous pour répondre.