警告功能(官方稱之可用性檢查),主要用來幫助你找到App中的Bug剂公。因為只有調(diào)用系統(tǒng)真正支持的API才安全兜材,如果你在舊系統(tǒng)中調(diào)用新版本API档押,那么你的APP很有可能崩潰或其他意外,過去官方建議查詢“Objective-C”運行時來確認(rèn)API是否適用锅论,但這個方法很難進行測試讼溺,也很容易出錯,而且它需要不同的語法來檢查每項全局變量最易、函數(shù)怒坯、類實例方法和類方法炫狱。如果適用Swift的開發(fā)者,可能在想這有什么剔猿?Swift有一個統(tǒng)一的語法#available可以在運行時视译,用于查詢API的可用性,而且編譯器甚至可以在編譯時捕捉缺失的可用性艳馒,然而憎亚,Xcode9的出現(xiàn),將彌補這一遺憾弄慰。
-
@ available
第美,Xcode9
將Swift
可用性檢查帶入了OC
,同步判斷當(dāng)前iOS系統(tǒng)是否滿足需求陆爽。例如:
假如說你有一個App什往,你想把它配置回iOS_10
中,并且你決定利用iOS11_Vision
框架中全新的人臉檢測API慌闭,當(dāng)你將API添加至你的App并構(gòu)建時别威,你會收到一個編譯警告,如圖:
這個警告告訴你驴剔,這些API只適用于iOS_11
或更新的系統(tǒng)中省古。你可以通過使用新的@available
結(jié)構(gòu)查詢API的可用性。
- 我們也可用利用
@ available
來判斷當(dāng)前系統(tǒng)是否滿足我們的某些條件:
if (@available(iOS 11, *)) {
NSLog(@"當(dāng)前設(shè)備系統(tǒng)版本 大于等于11.0");
} else if (@available(iOS 10, *)) {
NSLog(@"當(dāng)前設(shè)備系統(tǒng)版本 大于等于10.0");
} else {
NSLog(@"當(dāng)前設(shè)備系統(tǒng)版本 小于10.0");
}
-
API可用性宏
;如果你想編寫一個只能在iOS_11或更新的系統(tǒng)上使用的一整套方法丧失,這個時候我們的可用性宏API_AVAILABLE
恰好迎合了你的需求豺妓。
(1.) 我們先來定義一個API可用性宏
(2.) 接下來我們在iOS_10
的系統(tǒng)上調(diào)用一下我們剛剛定義的接口
-
如果在類之前聲明 API_AVAILABLE(ios(11)) 就是對該類添加了系統(tǒng)版本約束
- 針對
runtime 或者 c/c++
方法中,也有對應(yīng)判斷系統(tǒng)版本方法,相似@avalibale
語法__builtin_available
去判斷
對類的約束:
小結(jié):蘋果鼓勵你升級最新版本Xcode,使用最新SDK和操作方法
布讹,但是也不妨礙回歸老版本SDK
琳拭,這時候@available
方法在編譯時候 ,會被忽略不做警告提示。