我知道我可以找到正在运行的Swift I版本现在恢复到终端并输入:
xcrun swift --version
Swift version 1.1 (swift-600.0.57.4)
Target: x86_64-apple-darwin13.4.0
另外,我一直在阅读Swift中的Preprocessor Macros,但没有找到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,而不是更喜欢一些更简单的解决方案
答案 0 :(得分:31)
您可以使用条件编译指令来测试用于构建项目的特定Swift版本:
#if swift(>=4.0)
print("Hello, Swift 4!")
#elseif 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
答案 1 :(得分:14)
最后有一个解决方法来做到这一点。我正在使用前缀为__
的常量,您可以在游乐场中观察。对于某种级别的reflection,这会更容易,但是......
__IPHONE_OS_VERSION_MAX_ALLOWED
是80200,对于Xcode 6.2(Swift 1.1)来说意味着__IPHONE_8_2
,但在Xcode 6.3(Swift 1.2)中它的值是80300(__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
如Apple的Swift blog中所述,在Swift 2.0中,我们有#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
}
答案 2 :(得分:4)
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)
}
答案 3 :(得分:-1)
来自你的评论:
我想检查一下,因为不同版本的Swift有不同的功能
您不应该检查编程语言的版本,以便使用某些功能。这种方法要好得多:
if (self.respondsToSelector(Selector("yourMethodSelector"))) {
self.yourMethodSelector(test, sender: self)
} else {
//error handling
}
只需检查方法是否可用。
答案 4 :(得分:-1)
在Mac计算机上打开命令行
类型swift -version,不带双破折号,这对于Xcode 11 / Swift 5.2.2不再适用
当然,您必须更新到最新的IDE,该IDE始终下载Xcode,语言,编译器和工具的最新版本...所有内容都已更新。如果这样做,该解决方案肯定会起作用。
答案 5 :(得分:-5)
适用于iOS :
var systemVersion = UIDevice.currentDevice()。systemVersion;
对于OSX :
var systemVersion = NSProcessInfo.processInfo()。operatingSystemVersion;
ķ。