繁体   English   中英

Objective-C:回报价值

[英]objective-c: return value

我正在阅读Stephen Kochan的“使用Objective-C编程”(我是n0000b)。 在练习4-8之前,一切对我来说都是显而易见的。

它要求我在本章前面创建的“累加器”类中修改方法,以在使用一种数学方法(基本上是计算器)时“返回”累加器的值。 我最初将其理解为意味着我希望程序在使用任何一种方法(+,-,*,/)时都显示结果,因此我将其设置为这样做,因此每一行显示的是累积结果而不是只是最终结果:

[deskCalc setAccumulator: 0.0];
[deskCalc add: 200.]; //the result is displayed
[deskCalc divide: 100.0]; //the result is displayed
[deskCalc subtract: 1.0]; //the result is displayed
[deskCalc multiply: 5]; //the result is displayed
NSLog (@"The result is %g", [deskCalc accumulator]);

但是,在查找了其他人的解决方案之后,“返还累加器的价值”的含义似乎有所不同。

有人可以向我描述返回值的含义以及它的目的是什么? 我已经浏览了上一章几次,但是我仍然不清楚这将如何使程序表现不同。

谢谢! -安德鲁

您目前在累加器类中的计算方法可能看起来像这样:

- (void)add:(float)aFloat {
    result += aFloat;
    NSLog(@"%f", result);
}

此方法在当前状态下不返回任何值(无效)。 它仅在屏幕上输出当前总数。 这对练习很有帮助,但是在实际程序中,如果将计算结果显示在屏幕上,则计算结果可能不会很有用。 取而代之的是,您可能想要对结果做其他事情,因此您希望该方法返回它。 例如, NSString类具有方法length 如果要在屏幕上打印字符串的长度,此方法将不是很有用。 相反,它返回长度,因此程序可以对该值进行一些有用的操作(例如检查字符串的长度是否正确):

int length = [tweet length];
if (length > 140) {
    // display a useful error message
    ...
} else {
    // tweet it :)
    ...
}

若要修改计算器方法以返回某些内容,您将(a)必须将方法签名更改为具有返回值,并且(b)必须实际返回此值。

在方法签名中,只需将返回类型更改为void以外的其他类型。 在您的示例中,正确的类型可能是浮点型(或计算器内部为其当前结果使用的任何类型)。

- (float)add:(float)aFloat {
    ...
}

要实际返回当前值,您可以添加return语句,并在方法的末尾添加(在结束}之前)

return result;

(这假设result是包含当前计算结果的实例变量)。

他们要求您修改加,除,减方法,以在执行完操作后返回累加器的值。 我的猜测是,您原始的add / divide / etc方法定义了一个(void)返回值,这意味着它们不会从函数调用中返回任何值。 结果,您无法执行类似于以下内容的执行:

NSLog(@"Updated value: %g", [deskCalc substract: 1.0]);

从函数返回值意味着该函数不仅可以执行某种类型的操作,而且还向调用代码返回某种值。 返回值的目的在于,它允许您将代码分为逻辑组件,允许代码重用并提高代码的可维护性。

这是一个有用的示例:假设您需要计算数字的平方根。 您的代码不在乎平方根的计算方式,您只需要数字即可。 通过使用一个接受值的函数,计算其平方根,然后将计算出的值返回给调用代码,您的代码可以担心它对函数的返回值需要做什么,而不必担心逻辑本身。

这是一个返回NSString的函数示例:

- (NSString *) getAString {
    return @"String being returned";
}

这是您使用该功能的方式:

NSString *myString = [someObject getAString];

希望这对您的学习过程有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM