sno*_*nod 5 bitmask ios bit-fields swift
我有一个SCNetworkReachabilityFlags变量,想要检查它的特定值,例如,如果网络可以通过WWAN访问.
的SCNetworkReachabilityFlags类型是typealias用于UInt32与各种选项被定义为Int变量.
使用Objective-C,您可以执行以下操作:
if (flags & kSCNetworkReachabilityFlagsIsWWAN) {
// do stuff
}
Run Code Online (Sandbox Code Playgroud)
在Swift中如果我试试这个:
if reachabilityFlags & kSCNetworkReachabilityFlagsIsWWAN {
// do stuff
}
Run Code Online (Sandbox Code Playgroud)
你得到一个编译器错误:Could not find an overload for '&' that accepts the supplied arguments.
我已经阅读了一些其他问题,其中位域选项定义为RawOptionSet结构.这还没有完成SCNetworkReachability.
如何检查Swift中的标志?
该错误实际上不是抱怨标志检查的参数,而是抱怨返回值。语句if需要一个布尔值(或者至少是符合 的值Logical),但&两个Int值的运算符返回一个Int。您只需要在声明中进行比较if:
let flags = kSCNetworkReachabilityFlagsReachable
if 0 != flags & kSCNetworkReachabilityFlagsReachable {
println("flags contains kSCNetworkReachabilityFlagsReachable")
}
Run Code Online (Sandbox Code Playgroud)
由于SCNetworkReachabilityFlags和 常量(奇怪地)属于不同类型,因此您需要进行一些转换才能进行比较:
let reachabilityFlags:SCNetworkReachabilityFlags = SCNetworkReachabilityFlags(kSCNetworkReachabilityFlagsReachable)
if 0 != reachabilityFlags & SCNetworkReachabilityFlags(kSCNetworkReachabilityFlagsReachable) {
println("reachabilityFlags contains kSCNetworkReachabilityFlagsReachable")
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1804 次 |
| 最近记录: |