В Swift 4.1 появились две директивы: canImport и targetEnvironment. Доступны уже сейчас в Xcode 9.3 beta 4.
Первая будет полезна для кроссплатформенных решений и позволяет определить, можно ли импортировать тот или иной модуль.
#if canImport(UIKit)
// UIKit-based code
#elseif canImport(Cocoa)
// OSX code
#elseif
// Workaround/text, whatever
#endif
Вторая директива с единственно возможным аргументом simulator позволяет выполнить условную компиляцию для симулятора или реального девайса. Теперь не нужно перечислять все любимые нам архитектуры и ОС (arch(i386) || arch(x86_64)) && (!os(macOS)), а достаточно будет этого:
// Test for a simulator destination
#if targetEnvironment(simulator)
print("Simulator")
#else
print("Device")
#endif
http://ericasadun.com/2018/03/05/new-to-swift-in-xcode-9-3-beta-4-se-0075-and-se-0190-allow-better-configuration-testing/
Первая будет полезна для кроссплатформенных решений и позволяет определить, можно ли импортировать тот или иной модуль.
#if canImport(UIKit)
// UIKit-based code
#elseif canImport(Cocoa)
// OSX code
#elseif
// Workaround/text, whatever
#endif
Вторая директива с единственно возможным аргументом simulator позволяет выполнить условную компиляцию для симулятора или реального девайса. Теперь не нужно перечислять все любимые нам архитектуры и ОС (arch(i386) || arch(x86_64)) && (!os(macOS)), а достаточно будет этого:
// Test for a simulator destination
#if targetEnvironment(simulator)
print("Simulator")
#else
print("Device")
#endif
http://ericasadun.com/2018/03/05/new-to-swift-in-xcode-9-3-beta-4-se-0075-and-se-0190-allow-better-configuration-testing/