Search code examples
iosswiftoperators

~= operator in Swift


I recently downloaded the Advanced NSOperations sample app from Apple and found this code...

// Operators to use in the switch statement.
private func ~=(lhs: (String, Int, String?), rhs: (String, Int, String?)) -> Bool {
    return lhs.0 ~= rhs.0 && lhs.1 ~= rhs.1 && lhs.2 == rhs.2
}

private func ~=(lhs: (String, OperationErrorCode, String), rhs: (String, Int, String?)) -> Bool {
    return lhs.0 ~= rhs.0 && lhs.1.rawValue ~= rhs.1 && lhs.2 == rhs.2
}

It seems to use the ~= operator against Strings and Ints but I've never seen it before.

What is it?


Solution

  • Simply use as a shortcut to "range": you can construct a range and "~=" means "contains". (other can add more theoretical details, but the sense is this). Read it as "contains"

    let n: Int = 100
    
    // verify if n is in a range, say: 10 to 100 (included)
    
    if n>=10 && n<=100 {
        print("inside!")
    }
    
    // using "patterns"
    if 10...100 ~= n {
        print("inside! (using patterns)")
    
    }
    

    try with some values of n.

    Is used widely for example in HTTP response:

    if let response = response as? HTTPURLResponse , 200...299 ~= response.statusCode {
                    let contentLength : Int64 = response.expectedContentLength
                    completionHandler(contentLength)
                } else {
                    completionHandler(nil)