2010-10-28 38 views
0

确定,所以我想-roughly-此代码:Objective-C中发送一个指向接口属性

test1.m:

Foo *foo = [[Foo alloc] init]; 
foo.x = 1.0f; 

[staticClass bar:*foo.x]; 

staticClass.m:

-(void)bar:(float *)argVar 
{ 
    *argVar += 1.0f; 
} 

所以我将argVar指向了Foo类的一个属性。显然目前的代码不起作用。

什么是正确的语法/方式来做到这一点?

+0

它不应该是' - ( void)bar:(float *)argVar',它应该是'+(void)bar:(float *)argVar' – 2010-10-28 11:25:14

回答

1

认为,要做到这一点的正确方法是这样的:

float tmp = foo.x; 
[staticClass bar:&temp]; 
foo.x = tmp; 

和StaticClass.m应该是这样的:

+(void) bar:(float *) argvar // < not plus instead of minus, denotes static method 
{ 
    *argVar = 1.0f; 
} 
1

xFoo的财产,而不是一个变量。一个属性只是一对get/set方法的简称。它没有地址,因此不能像你正在做的那样传递。

最简单的解决办法是要经过一个局部变量:

float d = foo.x; 
[staticClass bar:&d]; 
foo.x = d; 

另外请注意,您使用&,不*,采取变量的地址。

+0

它们是花车,不是双打:) – 2010-10-28 11:24:13

+0

糟糕!固定。 :-) – 2010-10-28 11:28:06

+0

工程就像一个魅力!谢谢 :) – Art 2010-10-28 11:33:09

0

选项:

  • 变化Foo,使其具有float *财产
  • 变化+[staticClass bar:]这样,它需要并返回一个float,更新您的客户端代码相应
  • 使用ivar_getOffset找到实例变量后盾x的位置在Foo实例