【问题标题】:Exclude Objective C Category from some Swift classes从某些 Swift 类中排除 Objective C 类别
【发布时间】:2016-11-29 16:20:20
【问题描述】:

在目标 C 中,如果我导入类别,则只会在类中“使用”它。所以如果我有一个类别NSString+category,我必须在我想使用它的每个类中#import NSString+category.h

我有这样一个类别,我想在其中使用它的一些类是用 Swift 编写的。如果我通过将这个类别放在 Bridging 标头中将其公开给 Swift,所有 swift 类都将使用它。如何避免这种情况?

注意:我的类别实际上是在UIViewController 上,我放在那里的代码只能由某些 ViewControllers 使用。在“其他”ViewControllers 上使用这个 Category 感觉是错误的和不必要的。

【问题讨论】:

  • "在目标 C 中,如果我导入一个类别,它只会在一个类中“被使用”。"这不是真的;类别中的方法始终存在于类中。标头仅提供可见性:如果您尝试在没有导入的情况下调用它们,则会出现编译器错误。
  • 啊哈。我的错。我想这有效地回答了我的问题。
  • 你能显示代码吗?我还创建了完整的教程来一起使用 Swift 和 Objective-c。 stackoverflow.com/a/40887287/4488252

标签: objective-c swift objective-c-category


【解决方案1】:

您的基本假设不正确:

在目标 C 中,如果我将 Category 导入,它只会在类中“被使用”

如果类别被编译,类别中的方法会出现在该类上。导入标头使方法名称可见;否则,如果您尝试使用其中一个名称发送消息,编译器会给您一个警告。 (如果您确定,可以使用performSelector: 或运行时库调用方法。)

您的 Swift 类也是如此,并且由于将 Objective-C 标头引入 Swift 的方式,我认为没有办法限制方法在您的 Swift 代码中的可见性。

【讨论】:

    猜你喜欢
    • 2012-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-28
    • 1970-01-01
    • 2016-08-02
    • 2016-03-07
    • 1970-01-01
    相关资源
    最近更新 更多