2012-04-08 5 views
0

私の文字列をトリミングするためのマクロを作成します。マクロの予想式の問題を定義します。

私は、トリミングのために以下のコードを使用します。期待表現正しく同じ定義するマクロを作成する方法

#define TRIM_STRING(string) ([[NSString stringWithString:string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]]) 

:私はエラーを取得し、以下のように私は、マクロを作成する場合

[[NSString stringWithString:string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]] 

しかし?

答えて

3

#define TRIM_STRING(string) [(string) stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]] 

しかし、ここではインライン関数を使用しない理由は本当にありません。あなたはタイプ・チェックを受け取り、コンパイラーはエラーメッセージを意味をなさないでしょう。

NSString * NSStringTrim(NSString *string) 
{ 
    return [string stringByTrimmingCharactersInSet: 
      [NSCharacterSet whitespaceAndNewlineCharacterSet]]; 
} 

あるいは、より良い、このためにNSStringの上のカテゴリを作成します:インライン関数と同じあなたが名前空間を取得し、あなたが

を行うことによって、それを呼び出すことができます

@interface NSString (additions) 

- (NSString *)stringByTrimmingWhitespace; 

@end 

@implementation NSString (additions) 

- (NSString *)stringByTrimmingWhitespace 
{ 
    return [self stringByTrimmingCharactersInSet: 
      [NSCharacterSet whitespaceAndNewlineCharacterSet]]; 
} 

@end 

この方法

[string stringByTrimmingWhitespace] 

であり、これはココアに馴染みがなく、より一貫している。

2

開始括弧と終了括弧を削除してください。あなたは一組が多すぎます。

次に、「NSString stringWithString:string」を取り除き、stringに置き換えます。あなたがそれを括弧で覚えていなかったので、これはそれ自体が間違っていましたが、それは学問的です。とにかく文字列のコピーを作る必要はありません。

編集:

マクロへのあなたの引数が、それはあなたのマクロで発生した場所にかっこでそれを置くために、括弧の中にあるように、それは、良い考えです。これにより、プリプロセッサがマクロを展開するときに問題(複雑な式を引数として指定した場合)を回避できます。マクロとして

関連する問題