传递float属性作为参数

时间:2014-04-19 06:27:28

标签: objective-c uikit

我正在尝试设置一个调用以简化程序的一部分

我尝试通过以下方式调用下面的方法... [self aMethodToTry:self.units:row:self.unitsFloat];

- (void)aMethodToTry:(UITextField *)unitsRow : (int)row  : (float)units {


if (row == 1) {

    [unitsRow setText:(NSString *)[self.unitsArray objectAtIndex:row]];
    NSLog(@"This is the row -----> %ld",(long)row);
    self.unitConversionValue = [[self.unitsValueArray objectAtIndex:row]floatValue];
   // NSLog(@"%f",self.unitConversionValue);

    units = 8;
    NSLog(@"self.units float = %f", self.unitsFloat);
    NSLog(@"units = %f", units);

它继续从这里..但我想要的是传递的信息..这种情况下的行将是1解决为真的第一个if然后为“self.units”plopped到“unitsRow”和self.unitsFloat将被填入“单位”

但是当调用它时..设置文本部分工作正常..但是第一个日志显示为0.而第二个日志显示为8.0。

这是一件无法完成的事情。我只是看不出我搞砸了......

为什么不将self.unitsFloat设置为8?

提前感谢您的帮助。

布赖恩

2 个答案:

答案 0 :(得分:1)

您首先需要了解Objective C的基础知识。看看这个

ObjC method declaration

- (void) aMethodToTry:(UITextField *)unitsRow  withRow:(int)row  andUnits:(float)units {}

您可以按如下方式调用此方法:

[self aMethodToTry:textField withRow:1 andUnits:23.4f];

答案 1 :(得分:1)

方法参数按值传递(不是引用)。这意味着设置

 units = 8;
方法内部的

修改了方法的局部变量units,但确实如此  不修改传递的参数self.unitsFloat

"文本部分工作正常"因为unitsRow是Objective-C对象的指针, 和

[unitsRow setText:(NSString *)[self.unitsArray objectAtIndex:row]];

向该对象发送消息。它不会修改unitsRow变量。


要从方法中修改浮点变量,您必须传递 变量的地址:

- (void)aMethodToTry:(UITextField *)unitsRow : (int)row  : (float *)unitsPtr {
    // ...
    *unitsPtr = 8.0;
}

但是你不能拿一个属性的地址,因此你必须调用它 像

float tmpUnits = self.unitsFloat;
[self aMethodToTry:self.units :row :&tmpUnits];
self.unitsFloat = tmpUnits;

或者,您可以设置

self.unitsFloat = 8.0;

从方法中,而不是将属性值作为参数传递。


(你应该考虑使用"标记的方法参数"来制作 代码更具可读性,如另一个答案所示。)