__has_include检查一个类是否存在针对swift的问题?

时间:2016-07-21 21:41:00

标签: ios objective-c swift

在objective-c中,我有类似的东西:

#if __has_include(<MyFramework/SomeFeature.h>)
SomeFeature *h = [SomeFeature new]
#else
OtherFeature *h = [OtherFeature new]
#endif

我们如何检查swift中是否存在类?此链接有一些答案Weak Linking - check if a class exists and use that class

关于__has_include的好处是它是一个编译时检查,但它只适用于objective-c头。我们有什么适合快速的吗?或者也许我正在做的不是一个好方法?

例如,我有一个类Machine并且它有一个方法Gun,如果我已经包含Pistol框架,它将返回Pistol。如果我同时包含PistolAK47,则会返回AK47,因为它有更多的项目符号。

2 个答案:

答案 0 :(得分:1)

您可以在Swift 4中使用 #if canImport(ModuleName)

    #if canImport(UIkit)
       import UIKit
    #elseif canImport(MyBus)
       import MyBus
    #else
      // Workaround/text, whatever
    #endif

答案 1 :(得分:0)

编译时间检查在Swift中仍然可用,但它们的稳健性要差得多。为了实现编译时检查,您需要定义compilation condition并设置一些可以启用或禁用条件的新build configurations。 Swift没有预处理器(但是?),所以这就是你的能力范围。