Objective c 将属性中的结构包装到NSValue中

Objective c 将属性中的结构包装到NSValue中,objective-c,struct,Objective C,Struct,我使用NSValue包装我定义的结构,但是当通过@property访问该结构时,我得到以下错误:请求属性表达式的地址 这可以使用属性来完成吗,或者我首先将结构存储在变量中 无效代码: NSValue *previousTileObj = [NSValuevalue:&self.previousTile withObjCType:@encode(RobotTile)]; RobotTile localPreviousTile = self.previousT

我使用NSValue包装我定义的结构,但是当通过@property访问该结构时,我得到以下错误:请求属性表达式的地址

这可以使用属性来完成吗,或者我首先将结构存储在变量中

无效代码:

NSValue *previousTileObj = [NSValuevalue:&self.previousTile withObjCType:@encode(RobotTile)];               
RobotTile localPreviousTile = self.previousTile;
NSValue *previousTileObj = [NSValuevalue:&localPreviousTile withObjCType:@encode(RobotTile)];
有效代码:

NSValue *previousTileObj = [NSValuevalue:&self.previousTile withObjCType:@encode(RobotTile)];               
RobotTile localPreviousTile = self.previousTile;
NSValue *previousTileObj = [NSValuevalue:&localPreviousTile withObjCType:@encode(RobotTile)];

不能获取对象属性的访问器调用结果的地址

这是因为语句
self.previousTitle
只是Objective-C消息调用
[self-previousTitle]
的语法糖,它的语义与函数调用类似,因为生成的值在内存中没有实际位置,因此,它不能用
&
运算符获取其地址

但是,您可以通过将访问器调用包装在C数组文本中,将结果欺骗为可寻址对象。由于数组本质上是指向其第一个元素的指针,这将导致指向所需数据的指针

NSValue *previousTileObj = [NSValue value:(RobotTile []){self.previousTile} 
                             withObjCType:@encode(RobotTile)];

不能获取对象属性的访问器调用结果的地址

这是因为语句
self.previousTitle
只是Objective-C消息调用
[self-previousTitle]
的语法糖,它的语义与函数调用类似,因为生成的值在内存中没有实际位置,因此,它不能用
&
运算符获取其地址

但是,您可以通过将访问器调用包装在C数组文本中,将结果欺骗为可寻址对象。由于数组本质上是指向其第一个元素的指针,这将导致指向所需数据的指针

NSValue *previousTileObj = [NSValue value:(RobotTile []){self.previousTile} 
                             withObjCType:@encode(RobotTile)];

您可以利用并执行以下操作:


您可以利用并执行以下操作:


您是否尝试从第一个中删除(&S)?是的,当然。在这种情况下,错误是:将“RobotTile”(又名“struct RobotTile”)发送到不兼容类型“const void*”的参数;您是否尝试从第一个中删除(&S)?是的,当然。在这种情况下,错误是:将“RobotTile”(又名“struct RobotTile”)发送到不兼容类型“const void*”的参数;