簡體   English   中英

如何以編程方式找到 Swift 的版本?

[英]How can I programmatically find Swift's version?

我知道我可以找到我現在正在運行的 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,而是更喜歡一些更簡單的解決方案

您可以使用條件編譯指令來測試用於構建項目的特定 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

終於有一個解決方法來做到這一點。 我正在使用前綴為__的常量,您可以在 Playground 中觀察到。 通過某種程度的反射,這會更容易,但是......

__IPHONE_OS_VERSION_MAX_ALLOWED是80200,這意味着__IPHONE_8_2為6.2的Xcode(SWIFT 1.1),但它的值是80300( __IPHONE_8_3 )在Xcode 6.3(SWIFT 1.2)

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

isSwift12()

因此,現在在您的庫中,您可以快速失敗並使用以下命令告訴您的用戶 Swift 的版本不正確:

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

斯威夫特會給你一個很好的:

斷言失敗:需要 Swift 12: file ,第 20 行

更新 WWDC 2015 - Swift 2.0

正如 Apple 的Swift 博客中所述,在 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
}

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 有不同的功能

您不應該為了使用某些功能而檢查您的編程語言的版本。 這種方法要好得多:

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

只需檢查方法是否可用。

在 Mac 計算機上打開命令行

輸入 swift -version,沒有雙破折號,這對 Xcode 11/Swift 5.2.2 不再適用

當然,您必須更新到最新的 IDE,它始終會下載最新版本的 Xcode、語言、編譯器和工具......一切都已更新。 如果您這樣做,該解決方案肯定有效。

對於 iOS

var systemVersion = UIDevice.currentDevice().systemVersion;

對於 OSX

var systemVersion = NSProcessInfo.processInfo().operatingSystemVersion;

K。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM