[Swift2.0系列]API可用性檢查(譯)

Swift2.0:API可用性檢查

Swift安全至上。除了Swift2.0引入的API(應(yīng)用程序編程接口)可用性檢查之外,另外還新增一些非常棒的功能使得你的應(yīng)用程序更加穩(wěn)定。

每年Apple發(fā)布新的iOS重大更新之時,都將引入新的功能以及API。但是它們并不能兼容先前的iOS版本,導(dǎo)致你不得不謹慎對待這些新的API

設(shè)想應(yīng)用程序的部署目標是iOS 8(即只有iOS 8.0以上的設(shè)備才能安裝該程序),同時又要支持force touch功能。對于低于iOS 9版本的系統(tǒng),有如下幾種方式可以避免在iOS 8系統(tǒng)下調(diào)用iOS 9的API。

方式一:

// 以下為譯者注解:
// respondsToSelector用來判斷是否有以某個名字命名的方法(被封裝在一個selector的對象里傳遞)
// 只有iOS 9 才有forceTouchCapability方法。
if traitCollection.respondsToSelector(Selector("forceTouchCapability")) {
     // 檢查ForceTouch是否可用 倘若可用 進行配置
     if (traitCollection.forceTouchCapability == UIForceTouchCapability.Available) {
          //配置 Force touch
     }
}

方式二:

// 判斷是否在iOS9能夠正常工作
if NSProcessInfo().isOperatingSystemAtLeastVersion(NSOperatingSystemVersion(majorVersion: 9, minorVersion: 0, patchVersion: 0)) {
    // 判斷force touch 是否可用
     if (traitCollection.forceTouchCapability == UIForceTouchCapability.Available) {
          //配置 Force touch
     }
}

以上這些解決方案的問題在于,你必須對所有檢查都做到面面俱到.一旦你忘記檢查新API的可用性,應(yīng)用程序在舊版本中運行將導(dǎo)致崩潰。

不過,在Xcode7Swift2.0下,以上兩個范例均無法編譯通過。你必須使用#available關(guān)鍵字來進行API可用性檢查,如此就能解決編譯器報錯了。因此在Swift2.0中你的代碼應(yīng)該這么寫:

// 檢查當前設(shè)備系統(tǒng)是否在iOS 9下可用
if #available(iOS 9.0,*){
    // 可用情況下 才執(zhí)行如下代碼
    if (traitCollection.forceTouchCapability == UIForceTouchCapability.Available) {
          //configure force touch
     } 
}else {
         // Fallback on earlier versions
 }  

Guard

此外,使用guard來進行API可用性檢查也不失為一個良策。

func configureForceTouch() {
     // guard只有滿足條件下才進行下一步 不滿足則直接跳出程序
     guard #available(iOS 9.0, *) else {
          return
     }

     if (traitCollection.forceTouchCapability == UIForceTouchCapability.Available) {
         //configure force touch
     }        
}

例子中,倘若運行在設(shè)備上的系統(tǒng)版本小于等于iOS9.0,那么函數(shù)就會直接跳出。

類和方法

當然我們還可對類和方法執(zhí)行可用性檢查。在這種情況下,必須使用@available,而非#available:

@available(iOS 9.0, *)
     func configureForceTouch() {
          if (traitCollection.forceTouchCapability == UIForceTouchCapability.Available) {
               //configure force touch
           }    
     }
}

平臺的檢查

你同樣能夠?qū)Τ?code>iOS之外的平臺進行檢查。例如,檢查應(yīng)用程序是否支持在Mac OSX 10.10版本以上運行。

if #available(iOS 9.0, OS X 10.10, *) {
    // runs on iOS 9 and OS X 10.10
}

你可能好奇這個"*"星號有啥用?它代表了所有其他平臺以及所有未來可能出現(xiàn)的平臺。你必須它,即使你僅在iOS下使用。除以之外,你還可以明確watchOS以及tvOS的版本(當然只支持Xcode Beta 7.1之后)。

if #available(OSX 10.0, iOS 9, watchOS 2, tvOS 1, *) {
     // runs on OS X 10.0, iOS 9, watchOS 2 and tvOS 1
}

總結(jié): API可用性檢查功能保證了代碼的安全性。不過,為了在舊項目中使用iOS 9 SDK,你不得不做一些必要的遷移工作。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,833評論 4 61
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,715評論 19 139
  • 時間不等人,愛因斯坦在他最后幾年光陰里開始探索大一統(tǒng)理論,就連他臥床不起瀕死的那幾個小時里他都在寫筆記。我想一個偉...
    neozhang閱讀 278評論 0 1
  • 今年看去年發(fā)現(xiàn)很多溝通是錯誤的,發(fā)現(xiàn)很多想法是想當然的。 一直想著自己要怎么怎么,最后也沒達成啥,這樣很可悲,人生...
    ebf8bf373fdf閱讀 241評論 0 0
  • 一 ERR 1067引發(fā)的血案 今天在Navicat中運行sql語句創(chuàng)建數(shù)據(jù)表出現(xiàn)了錯誤Err 1067。而這條語...
    龍騰九天ly閱讀 21,083評論 0 4

友情鏈接更多精彩內(nèi)容