gpt4 book ai didi

swift - Swift 代码中 Obj C 枚举的 Xcode 7.3 未声明类型

转载 作者:搜寻专家 更新时间:2023-10-30 22:29:36 25 4
gpt4 key购买 nike

在我的项目中,我对 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 header missing 错误,因为 Swift 类尚未编译,因此尚未创建 header 。

代码解释:

“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 部分,枚举根本不可见,即使导入是在桥接 header 中进行的。

这个问题从第一个版本开始进行了大量编辑。

最佳答案

解决方案 1:将枚举移动到单独的头文件中。

我的枚举声明与类 header 在同一个标​​头中,特别是在该类的@interface 和@end 之间。

在 Xcode 7.2 中它没有产生任何问题并且 header 的解析成功,而在 Xcode 7.3 中他们可能优化了一些东西并改变了它的解析方式,所以它看到了我的类,但没有看到里面的枚举[也许如果它在类声明中,它将声明为私有(private)]

解决方案 2:将枚举声明移到 @interface @end 范围之外。

关于swift - Swift 代码中 Obj C 枚举的 Xcode 7.3 未声明类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36202805/

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