在Objective-C中,是否可以通过字符串名称检索结构属性?

在Objective-C中,是否可以通过字符串名称检索结构属性?,objective-c,Objective C,我有一个对象,它的属性是如下所示的结构: struct someStruct{ float32 x, y; }; 我要做的是通过字符串调用该struct属性的getter: id returnValue = [theObject performSelector:NSSelectorFromString(@"thePropertyName")]; 但正如您所看到的,“PerformSelect:”返回一个对象,而不是一个结构。我已经尝试了我能想到的所有方法,但都没有成功,这让我觉得我错

我有一个对象,它的属性是如下所示的结构:

struct someStruct{
    float32 x, y;
};
我要做的是通过字符串调用该struct属性的getter:

id returnValue = [theObject performSelector:NSSelectorFromString(@"thePropertyName")];
但正如您所看到的,“PerformSelect:”返回一个对象,而不是一个结构。我已经尝试了我能想到的所有方法,但都没有成功,这让我觉得我错过了一些东西——也许是一些简单的东西

你知道如何将returnValue引导回到结构中吗?谢谢

编辑: 不管最初的回复者是谁(他后来因为某种原因删除了他的帖子)——你是对的:根据你的回答,以下内容是有效的:

StructType s = ((StructType(*)(id, SEL, NSString*))objc_msgSend_stret)(theObject, NSSelectorFromString(@"thePropertyName"), nil);
编辑2:可以找到对该问题的相当详细的了解

编辑3:为了对称起见,下面是如何通过字符串名设置struct属性(请注意,这正是接受的答案完成设置的方式,而我的问题要求对上面第一次编辑中提到的getter使用稍微不同的方法):


您可以使用键值编码,将
struct
包装在
NSValue
中(并在返回时将其展开)。考虑一个具有Stult属性的简单类,如下所示:

typedef struct {
    int x, y;
} TwoInts;

@interface MyClass : NSObject

@property (nonatomic) TwoInts twoInts;

@end
然后,我们可以在一个
NSValue
实例中包装和展开
struct
,以将其传递给KVC方法和从KVC方法传递出去。下面是使用KVC设置结构值的示例:

TwoInts twoInts;
twoInts.x = 1;
twoInts.y = 2;
NSValue *twoIntsValue = [NSValue valueWithBytes:&twoInts objCType:@encode(TwoInts)];
MyClass *myObject = [MyClass new];
[myObject setValue:twoIntsValue forKey:@"twoInts"];
要获取结构作为返回值,请使用
NSValue
getValue:
方法:

TwoInts returned;
NSValue *returnedValue = [myObject valueForKey:@"twoInts"];
[returnedValue getValue:&returned];
由于最初的(大部分是正确的)反应似乎已经消失在乙醚中,我接受你的答案,因为它解决了一个与我之前遇到的问题非常相似的问题。我对原始帖子的编辑有我需要的特定解决方案。
TwoInts returned;
NSValue *returnedValue = [myObject valueForKey:@"twoInts"];
[returnedValue getValue:&returned];