Iphone 如何调用非void函数?Xcode

Iphone 如何调用非void函数?Xcode,iphone,function,methods,void,Iphone,Function,Methods,Void,如何调用非void函数?正常[self-methodName]工作。但是对于一个返回NSString的方法,我该怎么做呢。我总是出错。例如: + (NSString *)formulateYQLRequestFor:(NSArray *)tickers 这叫什么[self formulateYQLRequestFor]给了我一个错误 很抱歉,由于某些原因,safari不允许我缩进。 谢谢 我不知道-(NSString*)formulateYQLRequestFor:对NSArray有什么作用

如何调用非void函数?正常
[self-methodName]工作。但是对于一个返回
NSString
的方法,我该怎么做呢。我总是出错。例如:

+ (NSString *)formulateYQLRequestFor:(NSArray *)tickers 
这叫什么<代码>[self formulateYQLRequestFor]给了我一个错误

很抱歉,由于某些原因,safari不允许我缩进。
谢谢

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

+
指定类函数。您使用类名而不是实例来调用它

而不是:

[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];

调用
[self-formulateYQLRequestFor]有两个问题

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

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

正确的方法是:

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

其中
someArray
是一个有效的
NSArray
参数。

“+”表示一个类方法,您需要放置一个数组(如果方法检查参数,则为nil)。[[self class]formulatyqlrequestfor:[NSArray new]];