Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/113.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何以编程方式查找Swift';谁的版本?_Ios_Macos_Swift_Xcode6 - Fatal编程技术网

Ios 如何以编程方式查找Swift';谁的版本?

Ios 如何以编程方式查找Swift';谁的版本?,ios,macos,swift,xcode6,Ios,Macos,Swift,Xcode6,我知道我可以找到我正在运行的Swift版本还原到终端并键入: xcrun swift --version Swift version 1.1 (swift-600.0.57.4) Target: x86_64-apple-darwin13.4.0 另外,我一直在读关于Swift中的常量,但没有找到Swift的常量 随着Swift 1.2的临近,最好标记只在Swift 1.1上运行的旧代码(Xcode高达6.2)或需要Xcode 6.3的新代码(Swift 1.2) 注意:我还可以使用syste

我知道我可以找到我正在运行的Swift版本还原到终端并键入:

xcrun swift --version
Swift version 1.1 (swift-600.0.57.4)
Target: x86_64-apple-darwin13.4.0
另外,我一直在读关于Swift中的常量,但没有找到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,但更喜欢一些简单的iOS解决方案:

var systemVersion=UIDevice.currentDevice().systemVersion

对于OSX

var systemVersion=NSProcessInfo.processInfo().operatingSystemVersion

K.

根据您的评论:

我想检查一下,因为不同版本的Swift有不同的功能

您不应该为了使用或不使用某些功能而检查编程语言的版本。这种方法要好得多:

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

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

终于找到了解决方法。我使用的是前缀为
\uuu
的常数,你可以在操场上观察到。在某种程度上,这会更容易,但是

\uuuuIphone\uOS\uVersion\uMax\uAllowed
是80200,对于Xcode 6.2(Swift 1.1),这意味着
\uIphone\u8\u2
,但在Xcode 6.3(Swift 1.2)中它的值是80300(
\uIphone\u8\u3

func isSwift12()->Bool{
return\u IPHONE\u OS\u VERSION\u MAX\u ALLOWED==80300
}
isSwift12()
因此,现在在您的库中,您可以使用以下方法快速失败并告知您的用户Swift的版本不正确:

assert(isSwift12(), "Need Swift 12")
斯威夫特会给你一个好机会:

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

更新WWDC 2015-Swift 2.0

正如苹果在《Swift 2.0》中所述,在Swift 2.0中,我们有可用的块来检查代码中的某些操作系统版本。例如:

如果可用(OSX 10.11,*){
单色滤光器!.setValue(CIColor(红色:0.5,绿色:0.5,蓝色:0.5),forKey:KCIIInputColorKey)
}否则{
//对早期版本的回退
}

您可以使用条件编译指令测试用于构建项目的特定Swift版本:

#if swift(>=5.0)
print("Hello, Swift 5!")
#elseif 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

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)
}

在Mac电脑上打开命令行

键入swift-version,不带双破折号,对于Xcode 11/swift 5.2.2不再有效


当然,您必须更新到最新的IDE,它总是下载最新版本的Xcode、语言、编译器和工具。。。一切都更新了。如果你这样做,这个解决方案肯定会奏效。

我很肯定以前有人问过这个问题(当时没有令人满意的解决方案),但我找不到它……我找到了关于找出框架版本的讨论,但不是关于语言本身的讨论。任何信息都将受到重视,只是关于调用xcrun的警告。如果安装了多个Xcode版本,我不确定您得到的响应是否一定是运行应用程序的Swift版本。这就是我的意思:。也许不一样,但与你的问题有关。@Martin:是的,差不多。我不关心获取Swift版本的机制,只要它有效:-)不幸的是,这不是这个问题的解决方案。来自文档:“systemVersionProperty:操作系统的当前版本”。这将为您提供在设备中运行的操作系统的版本,而不是运行程序的Swift版本。例如,在OS X 10.10中,您可以同时运行Xcode 6.3(Swift 1.2)和Xcode 6.2(Swift 1.1)。当您的语言变化如此之快时,检查语言的版本以预先发出警告非常有用,这样用户就可以知道由于Swift的版本变化,试图使用的库无法编译。另外:这仅适用于NSObject子类,或带有@objc的Swift类,纯Swift类始终返回
nil
。最后:你在陈述你的观点,而不是回答问题。当问题是Swift版本之间的编译器(即语法)错误时,这没有帮助。回答得好。可能值得补充的是,对于Xcode,允许的最大值通常(总是?)设置为当前版本。另外,由于这可能是针对库的,因此可能值得在涵盖OS X的示例中添加测试。最后,您使用了Xcode 6.2,这意味着Swift 1.2,但仍然是Swift 1.1。Swift 1.2在Xcode 6.3中出现了,不是吗?修复了!谢谢你的提醒!是的,Xcode 6.2==Swift 1.1/Xcode 6.3==Swift 1.2。我希望constant将来会不断更新。我的想法快用完了:-我的答案是D。更好的解决方案,而不是将一个版本与if-else条件循环进行比较!!你的回答离题了。OP知道他们可以从命令行获取版本,他们在问题中提到了这一点。OP想要的是使用Swift以编程方式获取版本。