我有这段代码:
- (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"
为什么呢?在我看来,签名都是不同的。
答案 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:
的类中不能有多个方法,因为选择器是消息调度系统唯一要确定调用哪个方法的方法。