升级到 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 说明 self
是 MyEnum
的一个实例,它向我展示了我可以使用的正确值,例如 rawValue
。 Xcode明明知道我的Enum,但还是说Use of undeclared type 'MyEnum'
.
使用 CocoaPods 1.0+,框架被编译为动态框架,必须导入才能使用。
尝试将 import
语句添加到您的 Swift 文件中。例如,如果 CocoaPod 名为 MyModule
:
在Swift中:
import MyModule
或 Objective-C
@import MyModule;
在扩展文件的顶部。
我正在做一个大型 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 说明 self
是 MyEnum
的一个实例,它向我展示了我可以使用的正确值,例如 rawValue
。 Xcode明明知道我的Enum,但还是说Use of undeclared type 'MyEnum'
.
使用 CocoaPods 1.0+,框架被编译为动态框架,必须导入才能使用。
尝试将 import
语句添加到您的 Swift 文件中。例如,如果 CocoaPod 名为 MyModule
:
在Swift中:
import MyModule
或 Objective-C
@import MyModule;
在扩展文件的顶部。