我有一个SCNetworkReachabilityFlags
变量并想要检查它的特定值,例如如果网络可通过 WWAN 访问。
The SCNetworkReachabilityFlags
类型是一个typealias
for UInt32
各种选项定义为Int
变量。
使用 Objective-C 您可以执行以下操作:
if (flags & kSCNetworkReachabilityFlagsIsWWAN) {
// do stuff
}
在 Swift 中,如果我尝试这样做:
if reachabilityFlags & kSCNetworkReachabilityFlagsIsWWAN {
// do stuff
}
你会得到一个编译器错误: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")
}
Since SCNetworkReachabilityFlags
并且常量(奇怪地)属于不同类型,您需要进行一些转换才能进行比较:
let reachabilityFlags:SCNetworkReachabilityFlags = SCNetworkReachabilityFlags(kSCNetworkReachabilityFlagsReachable)
if 0 != reachabilityFlags & SCNetworkReachabilityFlags(kSCNetworkReachabilityFlagsReachable) {
println("reachabilityFlags contains kSCNetworkReachabilityFlagsReachable")
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)