Objective c 将float属性作为参数传递
我正试着打个电话,让我的程序轻松一点 我试着调用下面的方法,说。。。[self-amethodtry:self.units:row:self.unitsFloat]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]];
- (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;