在我的项目中,我对 Objective C 枚举进行了 Swift 扩展,这在 Xcode 7.2 中表现出色。
但是对于 Xcode 7.3,它在我扩展 Obj C 枚举的 Swift 文件中出现“未声明的类型”而失败。
我已经构建了一个示例项目,它可以编译并且运行良好,但是我不能让现有项目接受 Obj C 枚举上的扩展。
更新:
重新安装 Xcode 7.2 后,我可以确认项目编译成功。
在 Xcode 7.2 中运行后,我尝试在 Xcode 7.3 中再次启动该项目,并再次出现相同的问题 -> 无法构建 Obj C 枚举上的 Swift 扩展。
在 Xcode 7.3 中清理和删除派生数据后,我还收到 -Swift.h 标头丢失错误,因为尚未编译 Swift 类,因此尚未创建标头。
代码说明:
“FriendRequestResult.h”中的我的 Obj C 枚举:
typedef NS_ENUM(NSInteger, FriendStatus)
{
FriendStatusRequestedByUser = 1,
FriendStatusRequestedByOtherUser,
FriendStatusFriends,
FriendStatusBlocked,
FriendStatusNone,
FriendStatusError,
};
现在,正如我在 AppName-Bridging-Header.h 中所预期的那样,我有:
#import "FriendRequestResult.h"
然后,我对在 Xcode 7.2 中构建的 FriendStatus 进行了快速扩展,但在 Xcode 7.3 中因“使用未声明的类型”而失败:
extension FriendStatus
{
init(stringValue : String?)
{
if let stringValue = stringValue
{
switch stringValue
{
case "REQUESTED_BY_USER": self = .RequestedByUser
case "REQUESTED_BY_OTHER": self = .RequestedByOtherUser
case "FRIENDS": self = .Friends
case "BLOCKED": self = .Blocked
default: self = .None
}
}
else
{
self = .None
}
}
}
实际上这个对枚举的扩展还有一些其他的辅助函数,但这不应该以任何方式改变问题。
当然,如果枚举的扩展给出了未声明的类型,那么在 Swift 代码中任何地方使用这种类型都会失败,并且具有相同的“未声明的东西”。基本上,对于项目的 Swift 部分,枚举根本不可见,即使导入是在桥接头中进行的。
这个问题是从它的第一个版本中大量编辑的。