升级到 Swift 3 时使用未声明的类型

Use of undeclared type when upgrading to Swift 3

我正在做一个大型 iOS 项目,在 Swift 2.3 中制作,它使用了一些私有 CocoaPods (v. 1.1.1)。在其中一个 pods(制作于 Objective-C)中,它有一个名为 Enums.h 的文件。此文件包含例如此代码:

typedef NS_ENUM(NSInteger, MyEnum){
    MyEnumOne,
    MyEnumTwo
};

在我的应用程序 (Swift 2.3) 中,我为枚举实现了几个扩展,例如这个。例如这个例子:

extension MyEnum{
    func name()->String{
        return "some name"
    }
}

这显然只是实际情况的一个小例子,但你明白了。

我现在正试图将我的项目升级到 Swift 3.0,并使用 Xcode 自己的转换。我的代码现在充满了错误,但这是预料之中的。但是,我不知道如何解决这个错误:

Xcode 现在用红色错误标记扩展文件的第一行:extension MyEnum{,并显示 Use of undeclared type 'MyEnum'。如果我 CMD+单击名称 MyEnum,我会被定向到我的 cocoapod 内的枚举,正是它被声明的地方。为什么 Xcode 告诉我它未声明?这在 Swift 2.3..

中工作得很好

当我更新 Swift 版本并尝试更新 pods 时,cocoapods 抱怨我的 podfile 没有说 use_frameworks!,所以我将其添加进去。这会导致错误吗?

编辑: 即使在我的扩展文件中的 name() 函数中(现在显示 'Use of undeclared type'),我也可以开始输入 self. 并获得自动完成-window 说明 selfMyEnum 的一个实例,它向我展示了我可以使用的正确值,例如 rawValue。 Xcode明明知道我的Enum,但还是说Use of undeclared type 'MyEnum'.

使用 CocoaPods 1.0+,框架被编译为动态框架,必须导入才能使用。

尝试将 import 语句添加到您的 Swift 文件中。例如,如果 CocoaPod 名为 MyModule:

在Swift中:

import MyModule

或 Objective-C

@import MyModule;

在扩展文件的顶部。