wha*_*ean 2 reflection pointers runtime class objective-c
我有这个:
Ivar ivar = class_getInstanceVariable([self class], [name UTF8String]);
CGFloat floatVal = [coder decodeFloatForKey:name];
Run Code Online (Sandbox Code Playgroud)
然后,我想这样做:
object_setIvar(self, ivar, floatVal);
Run Code Online (Sandbox Code Playgroud)
...但是我不能像这样使用floatVal-在这种情况下使用floatVal的语法是什么?
首先,使用键值编码可能更容易:
[self setValue:@(floatVal) forKey:name];
Run Code Online (Sandbox Code Playgroud)
至于您的问题,我相信您必须首先将其object_setIvar转换为适当的函数类型以设置float类型,然后再调用它(未经测试):
void (*f)(id, Ivar, CGFloat) = (void (*)(id, Ivar, CGFloat))object_setIvar;
f(self, ivar, floatVal);
Run Code Online (Sandbox Code Playgroud)