有一些相关的问题,但我没有足够的网站声誉来评论现有的线程,迫使我开始一个新的线程.对于那个很抱歉.
看来Swift没有真正的预处理器.可以使用#if/#else/#endif进行变通,但问题在于它不会隐藏编译器中的"false"部分,强制'true'和'false'部分在语法上有效.鉴于Swift 3在语法上与Swift 2不兼容,这是很难的 - 有没有人找到一个解决方法,允许创建可以为任一环境编译的代码?(如果XCode 8 beta允许Swift 2.2,或者如果XCode 7.3.1允许Swift 3,那么这也会给我一个解决方法).
我想要做的只是给出一个简单的例子
#if SWIFT3
let session = WCSession.default()
#else
let session = WCSession.defaultSession()
#end
Run Code Online (Sandbox Code Playgroud)
我找不到任何方法可以做到这一点,并且看起来令人惊讶的是,由于Swift3与Swift2完全不兼容,因此没有办法做到这一点.
我找不到任何办法这样做
然而,有一次,有已被一个自雨燕2.2; 他们提前计划了这个意外情况:
https://github.com/apple/swift-evolution/blob/master/proposals/0020-if-swift-version.md
所以,像这样(我不知道WCSession是什么,所以我用了一个不同的例子):
#if swift(>=3.0)
let screen = UIScreen.main()
#else
let screen = UIScreen.mainScreen()
#endif
Run Code Online (Sandbox Code Playgroud)
编辑据Apple称,Xcode 8允许将任意条件编译标志传递给Swift:
Active Compilation Conditions是一个新的构建设置,用于将条件编译标志传递给Swift编译器.此设置的值的每个元素都传递给swiftc前缀,与传递给具有相同前缀的-D元素的方式相同.(22457329)Preprocessor Macrosclang
| 归档时间: |
|
| 查看次数: |
1735 次 |
| 最近记录: |