【发布时间】:2015-09-21 15:54:51
【问题描述】:
我有一个需要与 Xcode 7 beta 和 Xcode 6.4 兼容的代码库。这是因为 beta 测试和 App Store 构建应该使用稳定版本的编译器和 SDK 构建,但我在用于测试的手机上也有 iOS 9 beta。
这对 Objective-C 来说不是问题,但是现在我添加了一些 Swift,我发现很难保持与两个版本的 Xcode 的兼容性。
我能做什么?
我知道 Swift 有一个 #ifdef 指令,但是有没有 #ifdef 可以区分 Swift 1.2 和 2.0?除了 DEBUG、os 和 arch,我找不到 Swift 的有效列表。
这是我的意思的一个例子:
#ifdef __IPHONE_9_0
some Swift code that works in Swift 2.0 but won't compile in Swift 1.2
#else
some Swift code that works in Swift 1.2 but won't compile in Swift 2.0
#endif
或者更具体的例子:
public final class MessageParser : NSObject {
#ifdef __IPHONE_9_0
static let sharedHashtagRegex = try! NSRegularExpression(pattern:"(^|\\W)(#|\\uFF03)(\\w*\\p{L}\\w*)", options:[]);
#else
static let sharedHashtagRegex = NSRegularExpression(pattern:"(^|\\W)(#|\\uFF03)(\\w*\\p{L}\\w*)", options:nil, error:nil)!
#endif
// ...
}
【问题讨论】:
-
"我有一个需要与 Xcode 7 beta 和 Xcode 6.4 兼容的单一代码库" 它不会。忘了它。这是两个完全不同的 Swift 版本(和 Cocoa API);你不可能编写同时适用于两者的 Swift 代码。
标签: ios swift conditional-compilation