gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 20:06:03 25 4
gpt4 key购买 nike

我有一个对象,它有一个结构,如下所示:

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:可以找到对该问题的相当详细的了解 here .

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

NSValue* thisVal = [NSValue valueWithBytes: &thisStruct objCType: @encode(struct StructType)];
[theObject setValue:thisVal forKey:@"thePropertyName"];

最佳答案

您可以使用键值编码将 struct 包装在 NSValue 中(并在返回时解包)来完成此操作。考虑一个具有结构属性的简单类,如下所示:

typedef struct {
int x, y;
} TwoInts;

@interface MyClass : NSObject

@property (nonatomic) TwoInts twoInts;

@end

然后我们可以在 NSValue 实例中封装和解封装 struct 以将其传入和传出 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"];

要获取结构作为返回值,请使用 NSValuegetValue: 方法:

TwoInts returned;
NSValue *returnedValue = [myObject valueForKey:@"twoInts"];
[returnedValue getValue:&returned];

关于objective-c - 是否可以通过 Objective-C 中的字符串名称检索结构属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14431826/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com