Objective-C 枚举在 Swift 中不可见。

4

我有一个枚举,声明在我的Objective-C头文件中,如下所示:

typedef NS_ENUM(NSInteger, FontSize) {
    VerySmall = 12,
    Small = 14,
    Medium = 16,
    Big = 18
};

然后在我的桥接头文件中导入了这个头文件。

从我的Swift代码中,当我尝试将'FontSize'声明为参数时,编译器会报出'使用了未声明的类型FontSize'的错误。

根据开发者指南,这应该是可行的。有人遇到过同样的问题吗?


无法复现。func foo(size: FontSize) { } 对我来说编译通过。 - Martin R
2
我也可以工作。从Swift中是否可以看到此接口文件中的其他内容?即,可能存在更基本的桥接头问题吗?您是自己创建桥接头,还是在添加/创建Objective-C目标时自动提示您创建桥接头? - Rob
我可以正确地实例化包含枚举的Objective-C类,但是无法访问它。我在Xcode 7 beta上,有什么建议吗? - BalestraPatrick
1
对我来说它运行得很好。你需要扩展你的示例,以向我们展示一个可重现的示例。向我们展示一个包含此枚举的Objective-C类的最小示例,以及你如何尝试从Swift中使用它。 - Rob
3个回答

5

我曾经遇到过同样的问题,通过同时执行以下两个步骤成功解决:

  1. 将枚举声明移到 @interface 块之外
  2. 从 Swift 代码中移除枚举引用中的句点“.”

let fontSize:FontSize = VerySmall


1
在 Swift 代码中,去除枚举引用中的句点“.”有所帮助。 - Alexander Volkov

4

从一个干净的Swift项目开始,添加一个单独的.h文件(接受自动创建桥接标头)

Objective-C FontSize.h

typedef NS_ENUM(NSInteger, FontSize) {
    VerySmall = 12,
    Small = 14,
    Medium = 16,
    Big = 18
};

桥接头文件

#import "FontSize.h"

Swift 实现

import UIKit
class ViewController: UIViewController {
    let fontSize:FontSize = .VerySmall
}

使用 Xcode 6.4 和 7.0 进行构建、链接、运行和测试。

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接