我怎样才能以编程方式找到Swift的版本?

时间:2015-03-19 09:03:34

标签: ios macos swift xcode6

我知道我可以找到正在运行的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,而不是更喜欢一些更简单的解决方案

6 个答案:

答案 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;

ķ。