我正在尝试设置一个调用以简化程序的一部分
我尝试通过以下方式调用下面的方法... [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?
提前感谢您的帮助。
布赖恩
答案 0 :(得分:1)
您首先需要了解Objective C
的基础知识。看看这个
- (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;
从方法中,而不是将属性值作为参数传递。
(你应该考虑使用"标记的方法参数"来制作 代码更具可读性,如另一个答案所示。)