【问题标题】:Calling obj-c enum from swift not working after upgrading to Xcode 7.3 swift 2.2升级到 Xcode 7.3 swift 2.2 后,从 swift 调用 obj-c 枚举不起作用
【发布时间】:2016-07-11 19:06:17
【问题描述】:

在从 7.1 和 swift 2.2 升级到 Xcode 7.3 之前,代码运行良好。我也看到了使用 typedef NS_ENUM(NSUInteger, MyStatus)...的答案...但如果可能的话,我不希望更改现有的 obj-c 代码

在obj-c头文件中定义:

typedef enum {
    StatusPending,
    StatusTimeout,
    StatusSuccess,
    StatusFail
} MyStatus;

Swift 文件中的语句:

/* some code to retrieve the status */

switch (status) {

case .StatusSuccess:
 /* do something */

/* other test cases omitted here */

default:

}

我尝试过使用 .rawValue、.value 等,但仍然出现错误:

在类型“MyStatus”中找不到枚举案例“StatusSuccess”

升级前一切正常,并尝试卸载/重新安装 Xcode 7.3、Product->Clean、Product->Clean Build Folder.. 但没有成功 :-(

【问题讨论】:

  • 你能补充一下你得到的答案吗?

标签: objective-c xcode swift enums typedef


【解决方案1】:

不能在@interface 和@end 中声明“typedef NS_ENUM (NSUInteger, EnumName){}”,xcode 7.2 的解析与 xcode 7.3 不同。因此,只需将您的枚举声明移到 @interface @end 块之外,它应该可以正常工作,否则它被视为私有声明

【讨论】:

  • 谢谢!这让我发疯了
  • @spfursich 是的,我也花了很长时间才弄清楚这一点 :)
  • 这很愚蠢不是吗?如果枚举是在头文件中声明的,它应该对所有导入该文件的类都可用。现在我随处可用!
  • 这救了我的培根!为什么我看不到我的枚举,这让我发疯了。
猜你喜欢
  • 1970-01-01
  • 2017-02-27
  • 1970-01-01
  • 1970-01-01
  • 2017-02-20
  • 2016-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多