Objective-C クラスからインスタンス変数の名前を取得しようとしています。次のようなクラスがあるとします。
@interface MyClass : NSObject
@property (nonatomic, copy) NSSNumber *myVar;
@end
myVar を指定して、"myVar" を取得したいと考えています。次に、次のようなログで使用できます。
MyClass *myObject = [[myClass alloc] init];
NSLog(@"The variable is named: %@", getVarName([myObject myVar]));
次に、ログには次のように表示されますThe variable is named myVar
。ご協力ありがとうございました!
PS私がこれをしたい理由は、アーカイブのために変数をエンコードする方法を作成することです。したがって、encodeWithCoder
メソッドを作成するときは、次のようなことができます。
- (void)encodeWithCoder:(NSCoder *)aCoder
{
NSArray *varsForEncoding = [[NSArray alloc] initWithObjects:var1, var2, var3, nil];
for (NSObject *var in varsForEncoding)
{
[aCoder encodeObject:var forKey:getVarName(var)];
}
}
次に、逆を行いinitWithCoder
ます。これにより、タイプミスがこれを台無しにするのを防ぐことができます。たとえば@"myVar"
、エンコード時にキーを使用@"mVar"
して初期化子を入力するなどです。