標籤:swift2 api availability che xcode7 uistackview available
在開發的過程中,難免我們會用到新的API,如果處理不當的話,對於低於該版本的裝置在運行該應用的時候可能會奔潰,為了防止出現這種情況,我們需要在運行時判斷API是否可用。
iOS9中引進了新的View class,叫做UIStackView,它是一個View容器(可分為水平布局和垂直布局),與其他View不同的是,該View會自動管理內部view的布局,而無須編碼實現自動布局,同時細心的你會發現,在Storyboard檔案的右下角會多出一個叫做Stack的按鈕(和Align,Pin,Resolve Autolayout issues並列),:
如果你對它比較感興趣,可以點擊這裡。
由於這個類只在iOS9以後出現,為了同時兼顧iOS9以前的裝置,我們可以使用這種方法來判斷該類是否可用。
if (NSClassFromString("UIStackView") != nil) { // UIStackView is available} else { // UIStackView does not exist.}
通過向函數NSClassFromString傳入類名,根據返回值判斷當前環境是否支援該類。返回nil代表該類不存在,否則該類可用。該方法有一個不好的地方就是參數是字串,可能會打錯類名,比如NSClassFromString("UIStackview")。
在Swift 2以後,蘋果引進了API Availability Checking,在Xcode7項目裡如果使用到了新的API,編譯器會根據使用者指定的Deployment Target判斷該類,方法,或者屬性是否可用,如果停用話會給出一個編譯錯誤,然後你可以根據提示修正該錯誤。下面是對上面代碼的一個替換。
if #available(iOS 9.0, *) { // UIStackView is available} else { // Fallback on earlier versions}
參考資料:http://www.hackingwithswift.com/new-syntax-swift-2-availability-checking
參考資料:https://developer.apple.com/videos/wwdc/2015/?id=106
Swift API Availability Checking