有一些相关的问题,但我没有足够的网站声誉评论现有的线程,迫使我开始一个新的。对于那个很抱歉。任何方式在Swift 3中做真正的条件编译?
看来Swift没有一个真正的预处理器。解决方法是使用#if/#else/#endif,但这里的问题是它不会隐藏编译器中的“错误”部分,强制'true'和'false'部分在语法上是有效的。鉴于Swift 3在语法上与Swift 2不兼容,这很困难 - 有没有人找到一种解决方法,可以创建可以在任一环境下编译的代码? (如果XCode 8测试版允许使用Swift 2.2,或者如果XCode 7.3.1允许使用Swift 3,那么这也会给我一个解决方法)。
我试图做的,举个简单的例子,就是像
#if SWIFT3
let session = WCSession.default()
#else
let session = WCSession.defaultSession()
#end
我找不到任何方式做到这一点,似乎令人惊讶的是没有一个如何完成Swift2语言完全不兼容的Swift3语法。
Swift 3的语法确实与Swift 2非常不同。所以,即使你有一个预处理器,试图用'#filter'覆盖它也不会起作用。预期的解决方案是将代码库转换为Swift 3(或将其分配给Swift 3)。试图维护一个为两者编译的不重要的代码库都是死路一条(就像Swift 1和Swift 2一样)。 –
@RobNapier我完全同意这一点。这在道德上可能不太合理,但他们的确提供了有条件的编译,而且确实有用。而且我可以想象转换到Swift 3需要逐步进行的情况。 – matt
@matt看起来很有意思,但是从1到2我没有在任何非平凡的代码基础上找到实用的东西。 2到3是一个更大的变化,因为它重新命名了很多东西。很难想象它能够在非常小的代码之外工作。但时间会证明。 –