2010-07-15 6 views
2

J'ai une méthode comme ceci:Rédaction d'une macro pour cela: (Objective-C)

- (CGPoint) _convertCGPointCT2UIKit:(CGPoint)ctPoint{ 
CGPoint uikitPoint = CGPointMake(ctPoint.x + INITIAL_HORIZ_OFFSET, 
      self.bounds.size.height - ctPoint.y - INITIAL_VERT_OFFSET); 
return uikitPoint; 
} 

Est-il possible que je peux faire une macro? J'ai essayé cela mais j'ai des erreurs comme "; attendu avant" et ainsi de suite.

#define CGPointUIKit2CT(p) CGPointMake(p.x - INITIAL_HORIZ_OFFSET, self.bounds.size.height - p.y - INITIAL_VERT_OFFSET); 

merci d'avance.

Ignacio

Répondre

5

Quelques règles de base pour vous guider:

  • Wrap tout entre parenthèses
  • Ne pas mettre fin à une macro avec un point-virgule, qui est probablement ce que génèrent vos erreurs . Placez plutôt le point-virgule dans votre code lorsque vous l'utilisez.

Voilà ma réponse:

#define CGPointUIKit2CT(p) CGPointMake(((p).x) - INITIAL_HORIZ_OFFSET, self.bounds.size.height - ((p).y) - INITIAL_VERT_OFFSET) 
+0

Aïe! Quelle erreur stupide. un deux-points! Merci Chris – nacho4d

2

Bien qu'il puisse y avoir des raisons d'éviter l'envoi de méthode pour quelque chose comme ça, il n'y a aucune raison de le faire comme une macro au lieu d'une fonction en ligne statique:

static inline 
CGPoint CGPointUIKit2CT(UIView *self, CGPoint ctPoint) { 
    CGPoint uikitPoint = CGPointMake(ctPoint.x + INITIAL_HORIZ_OFFSET, 
     self.bounds.size.height - ctPoint.y - INITIAL_VERT_OFFSET);' 

    return uikitPoint; 
} 

Cela compilera la même chose qu'une macro, mais fournira de meilleures informations de débogage et de profilage.

Questions connexes