Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 将float属性作为参数传递_Objective C_Uikit - Fatal编程技术网

Objective c 将float属性作为参数传递

Objective c 将float属性作为参数传递,objective-c,uikit,Objective C,Uikit,我正试着打个电话,让我的程序轻松一点 我试着调用下面的方法,说。。。[self-amethodtry:self.units:row:self.unitsFloat] - (void)aMethodToTry:(UITextField *)unitsRow : (int)row : (float)units { if (row == 1) { [unitsRow setText:(NSString *)[self.unitsArray objectAtIndex:row]];

我正试着打个电话,让我的程序轻松一点

我试着调用下面的方法,说。。。[self-amethodtry: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);
从这里继续。。但我想要的是传递的信息。。在这种情况下,第一个if的行为1,然后将“self.units”插入“unitsRow”,将self.unitsFloat插入“units”

但当这被称为。。设置文本部分工作正常。。但是,第一个日志显示0。而第二个显示为8.0

这是不能做的事吗。。我只是不明白我在搞什么

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

提前谢谢你的帮助


Brian

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

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

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

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

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

 units = 8;
在方法内部修改方法的局部变量
单位
,但它确实修改了 不修改传递的参数self.unitsFloat

“文本部分工作正常”,因为
unitsRow
是指向Objective-C对象的指针, 及

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


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

- (void)aMethodToTry:(UITextField *)unitsRow : (int)row  : (float *)unitsPtr {
    // ...
    *unitsPtr = 8.0;
}
但是您不能获取某个属性的地址,因此您必须将其称为 像

或者,您可以设置

self.unitsFloat = 8.0;
从方法中,而不是将属性值作为参数传递


(而且您肯定应该考虑使用“带标签的方法参数”来
代码更具可读性,如另一个答案所示。)

实际上允许编写带有“未标记参数”的方法。这根本不推荐,但很有效。
float tmpUnits = self.unitsFloat;
[self aMethodToTry:self.units :row :&tmpUnits];
self.unitsFloat = tmpUnits;
self.unitsFloat = 8.0;