我有一个对象,它的属性是如下结构:
struct someStruct{
float32 x, y;
};
我想做的是通过字符串调用该结构属性的getter:
id returnValue = [theObject performSelector:NSSelectorFromString(@"thePropertyName")];
但正如您所见,“performSelector:”返回的是一个对象,而不是一个结构。我尝试了所有我能想到的投射方式,但无济于事,这让我觉得我错过了一些东西——也许是一些简单的东西......
任何想法如何将 returnValue 哄回结构?谢谢!
编辑:无论最初的回复者是谁(他后来出于某种原因删除了他的帖子) - 你是对的:根据你的回答,以下内容有效:
StructType s = ((StructType(*)(id, SEL, NSString*))objc_msgSend_stret)(theObject, NSSelectorFromString(@"thePropertyName"), nil);
编辑 2:可以在此处找到对该问题的相当详细的了解。
编辑3:为了对称起见,这里是如何通过其字符串名称设置结构属性(请注意,这正是接受的答案完成设置的方式,而我的问题需要对上面第一个编辑中提到的getter略有不同的方法):
NSValue* thisVal = [NSValue valueWithBytes: &thisStruct objCType: @encode(struct StructType)];
[theObject setValue:thisVal forKey:@"thePropertyName"];