【问题标题】:Objective-C enum is not visible in SwiftObjective-C 枚举在 Swift 中不可见
【发布时间】:2015-08-03 19:59:38
【问题描述】:

我有一个枚举,就像在我的 Objective-C 头文件中声明的那样:

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

然后在我的桥接头中导入此标头。

从我的 swift 代码中,当我尝试将“FontSize”声明为参数时,编译器会显示“使用未声明的类型 FontSize”。

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

【问题讨论】:

  • 无法复制。 func foo(size : FontSize) { } 为我编译。
  • 也适合我。这个接口文件中的其他内容在 Swift 中是否可见?即,是否可能存在更基本的桥接头问题?是您自己创建桥接头,还是在您添加/创建 Objective-C 目标时为您创建并提示您自动创建桥接头?
  • 我可以正确地实例化包含枚举的 Objective-C 类,但我无法访问它。我正在使用 Xcode 7 测试版,有想法吗?
  • 对我来说效果很好。您必须扩展您的示例以向我们展示可重现的示例。向我们展示带有此枚举的 Objective-C 类的 minimal example,以及您如何尝试在 Swift 中使用它。

标签: objective-c xcode swift


【解决方案1】:

我遇到了同样的问题,并通过以下两种方式解决了它:

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

let fontSize:FontSize = VerySmall

【讨论】:

  • "去掉句号'.'来自 Swift 代码中的枚举参考”帮助。
【解决方案2】:

从一个干净的 Swift 项目重新开始,添加一个 .h 文件(接受自动创建 Bridging-Headers)

Objective-C FontSize.h

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

桥接头

#import "FontSize.h"

快速实现

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

在 Xcode 6.4 和 7.0 上构建、链接、运行和测试。

【讨论】:

    【解决方案3】:

    即使上面有 NS_ENUM 答案,我仍然看不到我的枚举。

    事实证明,XCode 7.3 发生了变化,必须在 @interface-@end 块之外定义 NS_ENUM。

    Calling obj-c enum from swift not working after upgrading to Xcode 7.3 swift 2.2

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-15
      • 1970-01-01
      • 2011-11-15
      相关资源
      最近更新 更多