2011-12-06 9 views
0

私はXCode 4.2で開発していますが、マクロパラメータをどのように文字列化できるのでしょうか?私がCで行うと思ったので、私は#を使用しようとしていましたが、役に立たないです。ここに私のマクロは次のとおりです。Objective Cでマクロ値を文字列化しますか?

#define ASSIGN_PROPERTY(PROP_NAME, PROP_NAME_PARAM) { \ 
    if (PROP_NAME_PARAM == nil) { \ 
    NSAssert(PROP_NAME != nil, @"#PROP_NAME is already nil"); \ 
    PROP_NAME = nil; \ 
    } else { \ 
    NSAssert1(PROP_NAME == nil, @"#PROP_NAME is already set, address=%p", PROP_NAME); \ 
    PROP_NAME = PROP_NAME_PARAM; \ 
    } \ 
} 

は、次にプロパティとしてfooを持つクラスでは、私はそうのようなそのセッターを定義します。

- (void) setFoo:(NSObject *)fooParam { 
    ASSIGN_PROPERTY(foo, fooParam) 
} 

は、クライアントが非nilの値でsetFooを呼び出しますが、言ってやりますfooプロパティは既にnilではありません。私はマクロが印刷したい:

fooがすでにアドレス、設定されている= 0x5e55400

をしかし、その代わりに、それは印刷です:=

#PROP_NAMEがすでに設定されている、アドレスが0x5e55400

アドバイスはありますか?

+0

理由だけで(割り当て)@propertyを使用しないようなものを試してみましたか? – bryanmac

+0

[文字列を取ることができるマクロを作成するにはどうすればいいですか?](http://stackoverflow.com/questions/1793882/how-to-make-a-macro-that-c​​an-take-a-string) – bobbymcr

+0

@bryanmac 'foo'がすでにnilでないときにnil以外の値を代入しようとした場合、または' foo'がすでにnilである間にnilの値を代入しようとすると、私は主張したいと思います。 '@property(assign)'を使うと、どちらの場合でも盲目的に値を上書きします。 – shadowmatter

答えて

2

あなたは

NSAssert(PROP_NAME != nil, @"%s is already nil", #PROP_NAME); 
関連する問題