Negate #available statement

I use a guard for this:

guard #available(iOS 8.0, *) else {
    // Code for earlier OS
}

There’s slight potential for awkwardness since guard is required to exit the scope, of course. But that’s easy to sidestep by putting the whole thing into its own function or method:

func makeABox()
{
    let boxSize = .large

    self.fixupOnPreOS8()

    self.drawBox(sized: boxSize)
}

func fixupOnPreOS8()
{
    guard #available(iOS 8, *) else {
        // Fix up
        return
    }
}

which is really easy to remove when you drop support for the earlier system.

Leave a Comment