小编典典

如何从Swift确定设备类型?(OS X或iOS)

swift

我知道Swift相对较新,但是我想知道是否有一种确定设备类型的方法?

(就像您以前能够使用#define)?

我主要想知道如何区分OS X或iOS。我对此事一无所获。


阅读 329

收藏
2020-07-07

共1个答案

小编典典

如果要同时针对iOS和macOS(以及也可能对watchOS和tvOS)进行构建,则至少要编译两次:每个平台一次。如果要在每个平台上执行不同的代码,则需要构建时有条件的检查,而不是运行时检查。

Swift没有预处理器,但它确实有条件的构建指令-在大多数情况下,它们看起来像C等效项。

#if os(iOS) || os(watchOS) || os(tvOS)
    let color = UIColor.red
#elseif os(macOS)
    let color = NSColor.red
#else
    println("OMG, it's that mythical new Apple product!!!")
#endif

您还可以使用构建配置来测试架构(x86_64armarm64i386),目标环境(的iOS模拟器或Mac催化剂),或-D编译器标志(包括DEBUG通过标准的Xcode模板中定义的标志)。别以为这些事情会合而为一-
苹果公司宣布在arm64上推出macOS,预计在2020年上市,因此arm64并不意味着iOS,而iOS Simulator并不意味着x86,等等。

请参见 The Swift Programming Language Compiler
Control语句

__

(如果您想区分运行时使用的是哪种iOS设备,请UIDevice像从ObjC一样使用类。通常,查看对您而言重要的设备属性(而不是设备名称)更为有用和安全。或成语-
例如,使用特征和大小类来布置您的UI,检查Metal是否需要您的GPU功能,等等。

2020-07-07