【问题标题】:Why am I getting a type conflict warning on my enum in Objective-C?为什么我在 Objective-C 中的枚举上收到类型冲突警告?
【发布时间】:2013-06-20 22:33:00
【问题描述】:

这是我的常量.h:

@import Foundation;

typedef NS_ENUM(NSUInteger, BarcodeType) {
    kNormalBarcode,
    kNoBarcode,
    kGenericBarcode,
    kInvalidBarcode,
    kComicBarcode
};

@interface Constants : NSObject

@end

这是一个使用它的函数:

.h:

@interface Helper : NSObject

- (BarcodeType)barcodeType:(NSString *)barcode;

.m:

#import "Constants.h"
...

- (BarcodeType)barcodeType:(NSString *)barcode
{
   return kInvalidBarcode;
}

为什么我的函数会收到此警告,我需要更改什么来修复它?

Conflicting return type in implementation of 'getBarcodeType:': 'id' vs 'BarcodeType' (aka 'enum BarcodeType')

这段代码似乎可以在旧版本的 Xcode 中正常工作。

谢谢!

【问题讨论】:

  • 顺便说一句,您的方法名称不应以“get”开头。在 Objective-C/Cocoa 中以“get”为前缀的方法有一个特定的约定,即它们通过引用在它们的一个参数中返回一个值(例如-[NSArray getObjects:range:])。相反,您通常会调用类似-barCodeTypeForString: 的方法。
  • @AndrewMadsen 感谢您的提示,您说得对,我需要更改函数名称。
  • 错误是抱怨 -getBarcodeType:,但您显示了 -barcodeType: 的代码,这是一种不同的方法,前面没有“get”。问题可能出在 getBarcodeType 方法中。

标签: ios objective-c cocoa-touch enums


【解决方案1】:

检查您的 .h 文件。我的猜测是您对方法的声明使用id,这与您在返回类型BarcodeType 的.m 文件中的定义相冲突。 NSEnum 值不是对象,因此 id 无效。您需要更正声明,以便返回类型与实现匹配。

【讨论】:

  • 我只是在编辑我原来的问题...你能看到问题出在哪里吗?
  • 您发布的代码对我来说很好用。这是因为我的 .h 文件中没有与您向我们展示的 .m 文件中的函数冲突的声明。 粘贴声明函数的 .h 文件的代码
  • 我刚刚验证了你上面的代码编译得很好——你必须在某处有第二个方法声明——搜索整个项目。
  • Xcode 5(这就是为什么你们没有收到警告)。 - (BarcodeType)barcodeType:(NSString *)barcode; 位于@interface Helper : NSObject
  • 又错了。它在 Xcode 5 和 Xcode 4 中运行良好。粘贴所有使用 BarcodeType 的头文件/源文件,否则我们将无法帮助您找到问题的实际原因。别再猜了。
猜你喜欢
  • 2011-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-25
  • 2017-04-15
  • 2012-05-04
  • 1970-01-01
相关资源
最近更新 更多