我怎样才能以编程方式findSwift的版本?

我知道我可以find我正在运行的Swift的版本,恢复到terminal,input:

xcrun swift --version Swift version 1.1 (swift-600.0.57.4) Target: x86_64-apple-darwin13.4.0 

另外,我一直在阅读有关Swift中的预处理器macros ,但没有find一个Swift版本常量的运气。

正如Swift 1.2的方法,它将是很好的标志只能运行在Swift 1.1(Xcode高达6.2)或需要Xcode 6.3(Swift 1.2)的新代码的旧代码,

注意:我也可以使用system()来做类似的事情:

 system("xcrun swift --version | grep version > somefile.txt") 

然后打开somefile.txt,而宁愿更简单的解决scheme

您可以使用条件编译指令来testing用于构build项目的特定Swift版本:

 #if swift(>=3.0) print("Hello, Swift 3!") #elseif swift(>=2.2) print("Hello, Swift 2.2!") #elseif swift(>=2.1) print("Hello, Swift 2.1!") #endif 

最后得到一个解决方法来做到这一点。 我正在使用前缀为__的常量,您可以在您的Playground中观察。 这可能会更容易一些反思 ,但…

__IPHONE_OS_VERSION_MAX_ALLOWED是80200,这意味着Xcode 6.2(Swift 1.1)的__IPHONE_8_2 ,但在Xcode 6.3(Swift 1.2)中它的值是__IPHONE_8_3__IPHONE_8_3

 func isSwift12() -> Bool { return __IPHONE_OS_VERSION_MAX_ALLOWED == 80300 } isSwift12() 

所以现在在你的库中,你可以快速失败,并告诉你的用户Swift的版本是不正确的使用这个:

 assert(isSwift12(), "Need Swift 12") 

斯威夫特会给你一个很好的:

断言失败:需要Swift 12:文件,第20行

更新WWDC 2015 – Swift 2.0

正如苹果Swift博客中所述 ,在Swift 2.0中,我们有#available#available块来检查代码中的某些操作系统版本。 一个例子应该是:

 if #available(OSX 10.11, *) { monochromeFilter!.setValue(CIColor(red: 0.5, green: 0.5, blue: 0.5), forKey:kCIInputColorKey) } else { // Fallback on earlier versions } 

Swift 3.1扩展了@available属性,以支持除了现有的平台版本之外,指定Swift版本号。

 // Swift 3.1 @available(swift 3.1) func intVersion(number: Double) -> Int? { return Int(exactly: number) } @available(swift, introduced: 3.0, obsoleted: 3.1) func intVersion(number: Double) -> Int { return Int(number) } 

从你的评论:

我想检查,因为不同版本的Swift有不同的function

您不应该检查您的编程语言的版本,以便使用某些function。 这种方法好得多:

 if (self.respondsToSelector(Selector("yourMethodSelector"))) { self.yourMethodSelector(test, sender: self) } else { //error handling } 

只要检查一个方法是否可用。

对于iOS

var systemVersion = UIDevice.currentDevice()。systemVersion;

对于OSX

var systemVersion = NSProcessInfo.processInfo()。operatingSystemVersion;

K.