Keith Grout
Keith Grout

Reputation: 909

Can I use the range operator in a guard statement in Swift?

I'm trying to figure out an alternate way to do something like this, using the range operator.

guard let statusCode = (response as? HTTPURLResponse)?.statusCode, statusCode >= 200 && statusCode <= 299 else {return}

Maybe something like this:

guard let statusCode = (response as? HTTPURLResponse)?.statusCode where (200...299).contains(statusCode) else {return}

or

guard let statusCode = (response as? HTTPURLResponse)?.statusCode, statusCode case 200...299 else {return}

Is this possible in Swift?

Upvotes: 8

Views: 1250

Answers (3)

Sulthan
Sulthan

Reputation: 130102

Just for a different solution, you can also use:

guard
    let statusCode = (response as? HTTPURLResponse)?.statusCode,
    statusCode / 100 == 2
else {
    return
}

Upvotes: 1

OOPer
OOPer

Reputation: 47886

As you like:

guard
    let statusCode = (response as? HTTPURLResponse)?.statusCode,
    (200...299).contains(statusCode) else {return}

or:

guard
    let statusCode = (response as? HTTPURLResponse)?.statusCode,
    case 200...299 = statusCode else {return}

or:

guard
    let statusCode = (response as? HTTPURLResponse)?.statusCode,
    200...299 ~= statusCode else {return}

Upvotes: 7

Luca Angeletti
Luca Angeletti

Reputation: 59506

Here's a possibile solution

guard
    let statusCode = (response as? HTTPURLResponse)?.statusCode,
    200...299 ~= statusCode
    else { return }

Upvotes: 3

Related Questions