目标C - “重复声明方法”编译错误

时间:2011-09-10 20:00:19

标签: objective-c methods signature

我有这段代码:

- (id) getSearchSuggestions:(NSString*)q;
- (NSOperationQueue*) getSearchSuggestions:(NSString*)q callback:(id<UserDelegate>)callback;
- (id) getSearchSuggestions;
- (NSOperationQueue*) getSearchSuggestions:(id<UserDelegate>)callback;

我Xcode一直在最后行显示错误:

Duplicate declaration of method "getSearchSuggestions"

为什么呢?在我看来,签名都是不同的。

4 个答案:

答案 0 :(得分:4)

此签名:

- (id) getSearchSuggestions:(NSString*)q;

与此签名相同:

- (NSOperationQueue*) getSearchSuggestions:(id<UserDelegate>)callback;

所有对象指针都是id。所以这两个都是获取对象并返回对象的方法。

更好的名字的例子是:

- (id)searchSuggestionsForQueryString:(NSString*)q; // Or ForTag, or whatever "q" is
- (NSOperationQueue*)searchOperationQueueForQuery:(NSString*)q callback:(id<UserDelegate>)callback;
- (id)fetchSearchSuggestions;
- (NSOperationQueue*)searchOperationQueueWithCallback:(id<UserDelegate>)callback;

为什么你在这里返回一个操作队列并不完全清楚,但是这是你用于那种方法的名称。

答案 1 :(得分:1)

想想相应的选择器:

- (id) getSearchSuggestions:(NSString*)q;
getSearchSuggestions:

- (NSOperationQueue*) getSearchSuggestions:(NSString*)q callback:(id<UserDelegate>)callback;
getSearchSuggestions:callback:

- (id) getSearchSuggestions;
getSearchSuggestions

- (NSOperationQueue*) getSearchSuggestions:(id<UserDelegate>)callback;
getSearchSuggestions:

如您所见,第一个和最后一个方法具有相同的选择器,因此重复的方法声明错误。您需要通过更改名称来消除歧义。

答案 2 :(得分:1)

这是因为这两个选择器具有相同的选择:

- (id) getSearchSuggestions:(NSString*)q;
- (NSOperationQueue*) getSearchSuggestions:(id<UserDelegate>)callback;

您必须为选择器选择唯一的名称。

答案 3 :(得分:1)

您似乎正在尝试重载Java中的方法。 Objective-C没有这种能力(它基本上不适用于Objective-C的更动态类型系统)。在Objective-C中,方法的选择器是如何识别它的全部方式。可以将其视为一条消息:“调用名为getSearchSuggestions:的方法并为其提供这些参数。”名为getSearchSuggestions:的类中不能有多个方法,因为选择器是消息调度系统唯一要确定调用哪个方法的方法。