目标 C - "Duplicate declaration of method"编译错误



我有这段代码:

- (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"

为什么?

签名:

- (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;

这里返回一个操作队列的原因并不完全清楚,但这是您将用于执行该操作的方法的名称。

考虑相应的选择器:

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

可以看到,第一个和最后一个方法有相同的选择器,因此出现了重复的方法声明错误。您需要通过更改它们的名称来消除它们的歧义。

这是因为它们有相同的选择器:

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

您似乎在尝试像Java中那样重载方法。Objective-C没有这个功能(它基本上不能很好地与Objective-C的更动态的类型系统一起工作)。在Objective-C中,方法的选择器是它如何被识别的全部。可以把它看作一条消息:"调用名为getSearchSuggestions:的方法,并为它提供这些参数。"在名为getSearchSuggestions:的类中不能有多个方法,因为选择器是消息调度系统确定调用哪个方法的唯一方法。

相关内容

最新更新