我们希望找到一种方法来编写iOS专用的Swift代码块,该代码块支持多个Apple平台,并且在Xcode 14和15上运行时没有警告。
由于#if os(iOS)
对visionOS
的求值结果为true,因此需要测试#if os(iOS) && !os(visionOS)
才能在Xcode 15上构建仅限iOS的代码,这一事实使问题变得复杂。但是,这会在Xcode 14上生成警告,因为无法识别visionOS
。#if os(iOS) && (swift(<5.9) || !os(visionOS))
也会在Xcode 14上产生警告。
我们发现以下代码在这两种情况下运行时都不会发出警告:
#if swift(>=5.9)
#if os(iOS) && !os(visionOS)
code block
#endif
#else
#if os(iOS)
code block
#endif
#endif
字符串
但这是丑陋的,因为代码块需要复制。还有更好的办法吗?
1条答案
按热度按时间gev0vcfq1#
在Xcode 14.3和Xcode 15下,以下代码将允许您在没有任何警告的情况下编译:
字符串
当然,您可以根据需要添加其他
#elseif os(xxx)
(例如macOS)。在Xcode 14.2下,你会得到一个关于未知
visionOS
的警告,但是代码会正确地构建,没有任何代码重复。