Neuerungen in Swift 5.6 – Teil 1

Unavailability Condition

Swift besitzt bereits seit geraumer Zeit die Möglichkeit, Code erst ab einer bestimmten macOS-, iOS-, watchOS- oder tvOS-Version auszuführen. Die sogenannte Availability Condition ermöglicht es so, neuere APIs für aktuelle Betriebssystemversionen zu nutzen und gleichzeitig eine alternative Implementierung anzubieten, sollte eine App auf einer älteren Plattform genutzt werden.

Das folgende Listing zeigt eine simple Variante, wie sich eine solche Availability Condition in Swift umsetzen lässt:

if #available(macOS 12, iOS 15, *) {
    // Code zur Ausführung unter macOS 12 / iOS 15 und neuer
} else {
    // Code zur Ausführung in früheren macOS- und iOS-Versionen
}

Mittels #available führt man die Availability Condition aus und übergibt in runden Klammern die Betriebssysteme inklusive der Version, die mindestens zur Verfügung stehen muss, um den nachfolgenden Code im If-Block ausführen zu können. Optional kann man über einen Else-Block noch eine alternative Implementierung für ältere Betriebssystemversionen anbieten.

Der *-Parameter am Ende ist übrigens zwingend notwendig. Auf diese Art und Weise schließt man alle übrigen Plattformen in allen verfügbaren Versionen mit ein. Unter watchOS und tvOS würde so beispielsweise immer der Code des If-Blocks, nicht der des Else-Blocks, ausgeführt werden.

Mit Swift 5.6 steht eine zusätzliche Variante dieser Versionsprüfung zur Verfügung. Sie hört auf den Namen Unavailability Condition und funktioniert genau umgekehrt. Unterschreitet das zugrundeliegende System die über die Unavailability Condition aufgeführte Version, wird der zugehörige Code des If-Blocks ausgeführt. Wie ein solcher Aufruf aussehen kann, zeigt das nachfolgende Listing:

if #unavailable(macOS 12, iOS 15) {
    // Code zur Ausführung in macOS-Versionen älter 12 und
    // iOS-Versionen älter 15
}

Eine Unavailability Condition leitet man durch Einsatz von #unavailable ein. In runden Klammern führt man dann wieder die zu prüfenden Systeme auf.

Ein abschließender *-Parameter kommt bei einer Unavailability Condition übrigens nie zum Einsatz. Das liegt daran, dass der Code einer Unavailability Condition wirklich nur dann auszuführen ist, wenn die explizit aufgeführten Systemversionen unterschritten werden. Unter watchOS oder tvOS würde die oben aufgeführte Unavailability Condition demnach immer fehlschlagen und den Code im If-Block nicht ausführen.

Euer Thomas


Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert