簡體   English   中英

如何從 Objective-C 中的 class 屬性中獲取值?

[英]How do I get the value from a class property in Objective-C?

我想使用反射從 objective-c class 獲取變量值。

company.h 看起來像

@interface Company : NSObject {
}
@property (nonatomic, retain) NSString* phone;
- (NSString*) getPropertyValueByName: (NSString*) paramName;

company.m 看起來像

@implementation Company
@synthesize phone;
- (NSString*) getPropertyValueByName: (NSString*) paramName
{    
    id me = self;
    value = [me objectForKey: paramName];
    return value;
}
@end

我正在使用這個:

Company* comp = [Company new];
comp.phone = @"+30123456";

NSString* phone = comp.getPropertyValueByName(@"phone");

我得到的是一個例外:

-[Company objectForKey:]: unrecognized selector sent to instance

使用Key-Value-Coding有一種更簡單的方法。

已經有一種方法可以通過傳遞字符串來獲取屬性的值:

-(id)valueForKey:(NSString *)keyName;

您不需要為此編寫自己的方法。

那應該是 valueForKey 而不是 objectForKey。 objectForKey 是一個 NSDictionary 實例方法。 除此之外,您的代碼中還有一個潛在的錯誤。 您在上述方法中的返回類型是字符串,但在返回之前您不會將其轉換為 NSString。即使您確定它總是會返回一個字符串,避免任何疑慮也是一個好習慣。 當聲明一個 NSString 屬性時,你應該復制它而不是保留它。 而且,如果您可以輕松地說:聲明“我”變量有什么意義:

[self valueForkey:paramName];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM