Objective-C 中 Swift 的 canImport 类比

Posted

技术标签:

【中文标题】Objective-C 中 Swift 的 canImport 类比【英文标题】:Swift's canImport analogue in Objective-C 【发布时间】:2018-10-02 09:08:46 【问题描述】:

Swift 4.2 有一个特殊的条件canImport 可以帮助开发者检查一个模块是否可以导入到项目中。它是在 Swift 4.1 中引入的。

现在我正在开发用 Objective-C 编写的 ios 项目。我使用模块,对于每个目标,这些模块都是不同的。这就是为什么我想使用类似的东西:

#if canImport(SomeModule)
@import SomeModule;
#endif

我该如何解决这个问题?现在我为每个目标使用不同的“Other C Flags”,但我想找到更灵活的解决方案。

【问题讨论】:

【参考方案1】:

这个答案有点晚了,但我在处理类似案例时遇到了这个问题。 我用__has_include(<SomeModule/SomeModule.h>)

导入你的框架:

#if __has_include(<SomeModule/SomeModule.h>)
#import <SomeModule/SomeModule.h>
#define __HAS_SOME_MODULE_FRAMEWORK__
#endif

稍后在您的代码中:

- (void)doSomething 
    #ifdef __HAS_SOME_MODULE_FRAMEWORK__
    // with  SomeModule framework
    #else
    // without  SomeModule framework
    #endif

【讨论】:

以上是关于Objective-C 中 Swift 的 canImport 类比的主要内容,如果未能解决你的问题,请参考以下文章

无法通过 Swift 扩展向objective-c NSManagedObject 子类添加方法

无法访问扩展 Objective-C 类的 Swift 类中的私有变量

如何删除 use_frameworks!并继续在 Objective-C 项目中使用 swift pod?

不能使用自动生成的 Swift 桥接头

无法在 Today Extension 上使用 AFNetworking

无法在 Today Extension 上使用 AFNetworking