我知道Swift相对较新,但是我想知道是否有一种确定设备类型的方法?
(就像您以前能够使用#define)?
#define
我主要想知道如何区分OS X或iOS。我对此事一无所获。
如果要同时针对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_64,arm,arm64,i386),目标环境(的iOS模拟器或Mac催化剂),或-D编译器标志(包括DEBUG通过标准的Xcode模板中定义的标志)。别以为这些事情会合而为一- 苹果公司宣布在arm64上推出macOS,预计在2020年上市,因此arm64并不意味着iOS,而iOS Simulator并不意味着x86,等等。
x86_64
arm
arm64
i386
-D
DEBUG
请参见 The Swift Programming Language 中 的 Compiler Control语句。 __
(如果您想区分运行时使用的是哪种iOS设备,请UIDevice像从ObjC一样使用类。通常,查看对您而言重要的设备属性(而不是设备名称)更为有用和安全。或成语- 例如,使用特征和大小类来布置您的UI,检查Metal是否需要您的GPU功能,等等。
UIDevice