👇

[Swift] #unavailableで特定バージョン未満のOSのみ処理する

2022/11/08に公開

Swift5.6では以前からあるif #availableに加えてif #unavailableという構文が追加されています。

以下のように書くと、iOS15未満 (iOS14以下)のiOSでのみ処理することができます。

if #unavailable(iOS 15) {
    // process
}

// 今まではこう書いていた
if #available(iOS 15, *) {} else {
    // process
}

注意が必要なのが、#unavailable(iOS 15, *)はエラーになることです。#available(iOS 15, *)と書く癖でつい*を入れてしまいますが、ここは記法が違います。

https://github.com/apple/swift-evolution/blob/main/proposals/0290-negative-availability.md

元々のプロポーザルでは#unavailable(iOS 15, *)として提案されていましたが、2ndレビューで変更になったようです。
https://forums.swift.org/t/se-290-second-review-unavailability-condition/43544/59

#unavailable(iOS 15)と書いてあると「iOSのバージョンが15ではない(14でも16でもいい)」とも読めてしまうのであまり好きではないのですが、*を書かない方がスッキリしているのはその通りだと思います。

Discussion