Ios 如何以编程方式查找Swift';谁的版本?
我知道我可以找到我正在运行的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
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以编程方式获取版本。