从某些 Swift 类 中排除 Objective C 类别

Exclude Objective C Category from some Swift classes

在 objective C 中,如果我导入一个类别,它只会在 class 中 "be used"。因此,如果我有一个类别 NSString+category,我必须 #import NSString+category.h 在每个 class 我想使用它。

我有这么一个Category,class里面有一些我想用到的Swift里面写的。如果我通过将此类别放在桥接 header 中将其公开给 Swift,所有 swift classes 将使用它。如何避免这种情况?

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

您的基本假设不正确:

In objective C, a Category will only "be used" in a class if I import it

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

您的 Swift class 也是如此,并且由于 Objective-C header 被引入 Swift 的方式,我不不相信有一种方法可以限制方法在 Swift 代码中的可见性。