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

时间:2017-01-26 13:44:02

标签: ios swift swift3 cocoapods swift2.3

我正在研究一个在Swift 2.3中制作的大型iOS项目,它使用了一些私有的CocoaPods(v.1.1.1)。在其中一个pod(在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版本并尝试更新pod时,cocoapods抱怨我的podfile没有说use_frameworks!,所以我添加了。这会导致错误吗?

编辑: 即使在我的扩展名文件中的name() - 函数内部(现在称为“使用未声明的类型”),我也可以开始输入self.并获取自动完成窗口,说明{{1} }是self的一个实例,它向我显示了我可以使用的正确值,例如MyEnum。 Xcode清楚地知道我的Enum,但仍然说rawValue

1 个答案:

答案 0 :(得分:2)

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

尝试在您的Swift文件中添加state = state.copy(sampling=True) 语句。例如,如果CocoaPod名为import

在斯威夫特:

MyModule

或在Objective-C

import MyModule

在您的扩展程序文件的顶部。