防患未然的版本檢查 ~ 一天一點愛戀,一夜一點Swift 2 ( 2 )
swift注重安全是人盡皆知的,比起那總少根筋的Objective-C,swift的確安全許多,往往在compile時就發出錯誤訊息打斷我們,不讓我們生出有問題的App寶寶。
檢查版本乃swift 2新增的貼心功能。一旦我們在程式裡不小心使用了App支援的iOS版本無法使用的API,Xcode馬上生成紅色錯誤訊息警告我們。
比方以下UILabel的屬性只在iOS 9以上的版本支援
@available(iOS 9.0, *) public var allowsDefaultTighteningForTruncation: Bool
如果我們的App很好心地支援iOS 8,將Development Target設成8.0。

此時程式在compile時將馬上發現我們使用了舊版iOS無法支援的API,發出耀眼的紅色錯誤訊息警告我們,不讓我們生成浪費使用者寶貴時間的閃退App。

更叫人刮目相看的,如果我們想要依據使用者的iOS版本採用對應的API也不是問題。如以下程式所示,我們可利用#available語法判斷iOS版本,#available( iOS 9, *) 表示要iOS 9以上的版本,if條件才會成立。
let label = UILabel()
if #available(iOS 9, *) {
label.allowsDefaultTighteningForTruncation = false
}
else {
}
除此之外,我們也可為自己辛苦開發的程式設定支援的版本。比方以下程式利用@available(iOS 9, *)限定function test只支援iOS 9以上的版本。
@available(iOS 9, *)
func test() {}
某些早期的API,在新版的iOS已不建議使用,因此我們也常在SDK裡看到以下表達方式,利用introduced注明API開始的版本,deprecated表明過期的版本(在此版本就該徹徹底底忘了它,別再使用了)。
@available(iOS, introduced=6.0, deprecated=9.0)
public func viewControllerForUnwindSegueAction(action: Selector, fromViewController: UIViewController, withSender sender: AnyObject?) -> UIViewController?
以上種種貼心的功能,可是只有swift 2獨有唷。它的老前輩Objective-C可就沒那麼聰明了,如以下程式碼所示,就算我們的App設為支援到iOS 7,最後還是會順利生成看似無害,卻暗藏危機的App呀 !
UILabel *label = [[UILabel alloc] init];
label.allowsDefaultTighteningForTruncation = NO;