如果在当前项目中存在Swift模块,如何在编译时检查?

时间:2017-02-15 14:55:51

标签: ios swift xcode cocoapods

我想知道Swift 中是否有预处理器命令来检查模块是否存在。我使用CocoaPods依赖管理器工具,我想在编译时检查 ,这样我就可以使用它,或者我必须做一个自定义的解决方法。

这将是这样的:

public boolean areLocationServicesEnabled(Context context) {
    LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
    try {
        return locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) ||
                locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
    } catch (Exception e) {
        e.printStackTrace();
        return false;
    }
}

2 个答案:

答案 0 :(得分:8)

引入canImport指令的提案(SE-0075)已被接受,但从Swift 3.0.2 / Swift 3.1 beta开始尚未实施。跟踪实施的错误是SR-1560

使用该指令,您可以编写如下内容:

#if canImport(UIKit)
// UIKit-based code
#elseif canImport(Cocoa)
// OSX code
#else
// Workaround/text, whatever
#endif

PS:“预处理器命令”不是Swift的正确术语,因为Swift没有预处理器。

答案 1 :(得分:0)

编译或归档应用程序时,它只会根据您编写的代码安装实际需要的模块,方法和类。所以据我所知,没有办法检查模块是否存在,因为它不可能拥有或不拥有它。换句话说,要么你拥有它,要么你没有。这意味着,作为开发人员,您知道是否安装了pod,这就是为什么不应该在运行时检查某些内容的方法,这已经是预先确定的。请问你为什么要这样做?