4

Swift programming language guide has this to say regarding the last argument in #availability check:

if #available(iOS 9, OSX 10.10, *) {
    // Use iOS 9 APIs on iOS, and use OS X v10.10 APIs on OS X
} else {
    // Fall back to earlier iOS and OS X APIs
}

The last argument, *, is required and specifies that on any other platform, the body of the if executes on the minimum deployment target specified by your target.

Excerpt From: Apple Inc. “The Swift Programming Language (Swift 2.1).” iBooks. https://itun.es/us/jEUH0.l

I think I am not understanding this correctly - if I intend for the code to execute in iOS 9 only and my minimum deployment target is 8, won't that crash my app when running on other platforms and the code executes on the minimum deployment target?

4

1 に答える 1

4

最後の引数は、本体がiOS 8 などの iOS または OS X の他のバージョン*で実行されることを示していません 。

これは、本体がwatchOS や tvOS などの他のプラットフォームの最小展開ターゲットで実行されることを示します。現在知られているプラ​​ットフォームは、Swift ドキュメントの「属性」の「宣言属性」の下にリストされています。

    iOS
    iOSApplicationExtension
    OSX
    OSXApplicationExtension
    ウォッチOS
    watchOSApplicationExtension
    tvOS
    tvOSApplicationExtension

最後の引数*は、明示的にリストされていないすべてのプラットフォーム、および将来のプラットフォームを処理するために必要です。あなたの例では、

if #available(iOS 9, OSX 10.10, *) {

} 

ブロックが実行されます

  • iOS >= 9、iOS プラットフォームで実行する場合、
  • OS X >= 10.10 の場合、OS X プラットフォームで実行する場合、
  • 他のプラットフォーム (watchOS など) で実行する場合は、それぞれの最小展開ターゲットで。
于 2015-11-24T20:46:36.467 に答える