猿问

检测是否正在为Swift中的设备或模拟器构建应用程序

在Objective-C中,我们可以知道是否正在使用宏为设备或模拟器构建应用程序:


#if TARGET_IPHONE_SIMULATOR

    // Simulator

#else

    // Device

#endif

这些是编译时宏,在运行时不可用。


如何在Swift中实现相同目标?我搜索了堆栈溢出,查看了文档,但无法弄清楚。


潇湘沐
浏览 693回答 3
3回答

杨__羊羊

已过时SWIFT 4.1。使用#if targetEnvironment(simulator)代替。资源要在Swift中检测模拟器,您可以使用构建配置:在Swift编译器-自定义标志>其他Swift标志中定义此配置-D IOS_SIMULATOR在此下拉列表中选择任何iOS模拟器SDK下拉列表现在,您可以使用以下语句来检测模拟器:#if IOS_SIMULATOR    print("It's an iOS Simulator")#else    print("It's a device")#endif您也可以扩展UIDevice类:extension UIDevice {    var isSimulator: Bool {        #if IOS_SIMULATOR            return true        #else            return false        #endif    }}// Example of usage: UIDevice.current.isSimulator

喵喔喔

基于@WZW的答案和@Pang的评论,我创建了一个简单的实用程序结构。此解决方案避免了@WZW的回答产生警告。import Foundationstruct Platform {    static var isSimulator: Bool {        return TARGET_OS_SIMULATOR != 0    }}用法示例:if Platform.isSimulator {    print("Running on Simulator")}
随时随地看视频慕课网APP
我要回答