I have a SCNetworkReachabilityFlags
variable and want to check it for particular values, e.g. if the network is reachable via WWAN.
The SCNetworkReachabilityFlags
type is a typealias
for UInt32
and the various options are defined as Int
variables.
Using Objective-C you could do the following:
if (flags & kSCNetworkReachabilityFlagsIsWWAN) {
// do stuff
}
In Swift if I try this:
if reachabilityFlags & kSCNetworkReachabilityFlagsIsWWAN {
// do stuff
}
you get a compiler error: Could not find an overload for '&' that accepts the supplied arguments
.
I've read some other questions where the bitfield options where defined as a RawOptionSet
struct. This hasn't been done in SCNetworkReachability
.
How to you check for flags in Swift?
That error is actually complaining not about the arguments of your flags-check, but about the return value. An if
statement expects a boolean (or at least something conforming to Logical
), but the &
operator for two Int
values returns an Int
. You just need a comparison in your if
statement:
let flags = kSCNetworkReachabilityFlagsReachable
if 0 != flags & kSCNetworkReachabilityFlagsReachable {
println("flags contains kSCNetworkReachabilityFlagsReachable")
}
Since SCNetworkReachabilityFlags
and the constants are (strangely) of different types, you'll need to do some casting to make the comparison work:
let reachabilityFlags:SCNetworkReachabilityFlags = SCNetworkReachabilityFlags(kSCNetworkReachabilityFlagsReachable)
if 0 != reachabilityFlags & SCNetworkReachabilityFlags(kSCNetworkReachabilityFlagsReachable) {
println("reachabilityFlags contains kSCNetworkReachabilityFlagsReachable")
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With