gpt4 book ai didi

objective-c - NS_ENUM 到 Swift 3 没有按预期工作

转载 作者:可可西里 更新时间:2023-11-01 02:14:12 27 4
gpt4 key购买 nike

我正在使用 Swift 3 和 xcode 8。我是 objective-C 的新手,也是 swift 的新手,所以这可能是个白痴问题。但是这里开始了!

我正在从 objective-C 过渡到 swift 3。这是 objective-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。以下是工作代码(编译并运行,没有 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 字符或基本多语言平面之外不在私有(private)使用区域中的字符开头。之后第一个字符、数字和组合 Unicode 字符也是允许的。”

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

最佳答案

可能是,因为另一个标识符 (MaplyMapType3D) 将是 3D 而不是 type3D,但标识符不能以数字开头.所以必须保持 type

关于objective-c - NS_ENUM 到 Swift 3 没有按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39672561/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com