NS_ENUM到Swift 3没有按预期工作

时间:2016-09-24 04:38:58

标签: objective-c swift

我使用的是Swift 3和xcode 8.我对Objective-C非常新,而且对swift来说相当新,所以这可能是一个愚蠢的问题。但是这里去了!

我从Objective-C桥接到swift 3.这里是目标-C的代码片段:

typedef NS_ENUM(NSInteger, MaplyMapType) {
    MaplyMapType3D,
    MaplyMapTypeFlat,
};

@interface MaplyViewController : MaplyBaseViewController

/// @brief Initialize as a flat or 3D map.
- (nonnull instancetype)initWithMapType:(MaplyMapType)mapType;

在我的Swift 3源文件中,我实例化了一个MaplyViewController。以下是WORKING代码(它编译并运行,没有xcode错误)。

theViewC = MaplyViewController(mapType: .typeFlat)

为什么这样做?从引用https://developer.apple.com/library/content/documentation/Swift/Conceptual/BuildingCocoaApps/InteractingWithCAPIs.html和其他引用我认为正确的代码应该是:

theViewC = MaplyViewController(mapType: .flat)

但那不会编译。

从一天后的更多信息: Amin Negm-Awad在下面的评论中几乎解释了这一点。简单的桥接规则不能用于生成标识符.flat和.3D,因为不允许使用标识符.3D。 language reference表示"标识符以大写或小写字母A到Z,下划线(_),基本多语言平面中的非组合字母数字Unicode字符或基本多语言平面外的字符开头在私人使用区。在第一个字符之后,还允许使用数字和组合Unicode字符。"

因此,桥接不能产生枚举标识符.flat和.3d。我找不到任何参考来解释桥接用于提出替代标识的规则,即在这种情况下的.typeFlat和.type3D。

1 个答案:

答案 0 :(得分:1)

可能是这样,因为其他标识符(Keys)将是None而不是MaplyMapType3D,但标识符不能以数字开头。所以必须保持3D