2

変数名文字列に変換するにはどうすればよいですか?

例:

これから:

NSString *someVariable
int otherVariable

タイプに関係なく、変数の実際の名前でNSStringを取得したいと思います。
したがって、上記の2つの変数については、それらの名前(someVariableotherVariable)を取得する必要があります。

4

3 に答える 3

5

私はこのコードスニペットで問題を解決することができました:

objcランタイムをインポートする
#import <objc/runtime.h>

そして、あなたは次のようにプロパティを列挙することができます:

- (NSArray *)allProperties
{
    unsigned count;
    objc_property_t *properties = class_copyPropertyList([self class], &count);

    NSMutableArray *rv = [NSMutableArray array];

    unsigned i;
    for (i = 0; i < count; i++)
    {
        objc_property_t property = properties[i];
        NSString *name = [NSString stringWithUTF8String:property_getName(property)];
        [rv addObject:name];
    }

    free(properties);

    return rv;
}

それが誰かを助けることを願っています。

于 2012-10-23T07:38:08.157 に答える
1

変数名の前後に「...」を追加するだけです。すなわち

"someVariable"
"otherVariable"

文字列を(としてconst char*)取得するには、が必要な場合はNSString*

@"someVariable"
@"otherVariable"

マクロ内では、構文#...を使用して、マクロ変数の周りに引用符を配置できます...引用符を外します。

#define MyLog(var) NSLog(@"%s=%@", #var, var)

となることによって

MyLog(foo);

に拡張されます

NSLog(@"%s=%@", "foo", foo);
于 2012-10-08T15:36:15.263 に答える
0

これらはC宣言であり、Cには必要なものを提供するイントロスペクション機能がありません。

おそらく、変数を宣言し、最初の変数の名前で2番目の変数を宣言して初期化するプリプロセッサマクロを作成できます。

しかし、これはなぜこのレベルの内省が必要なのかという疑問を投げかけます。

于 2012-10-08T15:30:09.507 に答える