防患未然的版本檢查 ~ 一天一點愛戀,一夜一點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;

彼得潘的iOS App程式設計入門,文組生的iOS App程式設計入門講師,彼得潘的 Swift 程式設計入門,App程式設計入門作者,http://apppeterpan.strikingly.com

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store