我想知道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;
}
}
答案 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,这就是为什么不应该在运行时检查某些内容的方法,这已经是预先确定的。请问你为什么要这样做?