如何调用非void函数? Xcode中

时间:2014-03-17 18:16:24

标签: iphone function methods void

如何调用非空函数?正常[self methodName];有效。但是,如何为返回NSString的方法执行此操作。我一直在收到错误。例如:

+ (NSString *)formulateYQLRequestFor:(NSArray *)tickers 

我该怎么称呼它? [self formulateYQLRequestFor];给了我一个错误。

抱歉格式化,出于某种原因,safari不会让我缩进。 谢谢!

3 个答案:

答案 0 :(得分:1)

+指定一个类函数。您可以使用类名称来调用它,而不是实例。

而不是:

[self formulateYQLRequestFor:myArray];

这样做:

[MyClassName formulateYQLRequestFor:myArray];

或者,你可以这样做:

[[self class] formulateYQLRequestFor:myArray];

如果您不想,您不必对返回值做任何事情。至少使用ARC,返回值将自动释放。但是,由于函数不可能单独执行任何操作,因此您可能应该对返回值执行某些操作:

NSString *returnValue = [[self class] formulateYQLRequestFor:myArray];
// Do something with returnValue

最后,如果你想在不传入数组的情况下调用函数,你仍然需要数组参数,但是函数可能会接受数组的nil

NSString *returnValue = [[self class] formulateYQLRequestFor:nil];

答案 1 :(得分:0)

我不知道- (NSString *)formulateYQLRequestFor:对NSArray的作用,但如果没有必要,您可以致电[self formulateYQLRequestFor:nil];。或者,您可以使用空数组[self formulateYQLRequestFor:[NSArray array]];调用它。

答案 2 :(得分:0)

致电[self formulateYQLRequestFor];

时出现两个问题

首先,该方法采用您未提供的参数。因此,编译器正在寻找名为formulateYQLRequestFor而不是formulateYQLRequestFor:的方法。这很重要,因为:是Objective-C中方法名称的一部分。所以你试图调用一个不存在的方法。

其次,self正在向您的班级的实例发送消息。方法签名中的+表示您有一个类方法,因此self不响应您尝试调用的方法。

正确的方法是:

NSString *resultString = [[self class] formulateYQLRequestFor:someArray];

其中someArray是有效的NSArray参数。