在我的应用程序中尝试检查internet连接时出现此错误。
我使用Xcode 7.1.1 Swift 2.0
代码块如下
public class Reach {
class func isConnectedToNetwork() -> Bool {
var zeroAddress = sockaddr_in(sin_len: 0, sin_family: 0, sin_port: 0, sin_addr: in_addr(s_addr: 0), sin_zero: (0, 0, 0, 0, 0, 0, 0, 0))
zeroAddress.sin_len = UInt8(sizeofValue(zeroAddress))
zeroAddress.sin_family = sa_family_t(AF_INET)
let defaultRouteReachability = withUnsafePointer(&zeroAddress, {
SCNetworkReachabilityCreateWithAddress(nil, UnsafePointer($0))//.takeRetainedValue()
})
var flags: SCNetworkReachabilityFlags = []
if SCNetworkReachabilityGetFlags( defaultRouteReachability!, &flags) == false {
return false
}
//The following two lines shows the error
let isReachable = (flags & (kSCNetworkFlagsReachable)) != 0
let needsConnection = (flags & (kSCNetworkFlagsConnectionRequired)) != 0
return isReachable && !needsConnection
}
}
我尝试将标志强制转换为Int,将NetworkFlag强制转换为UInt32,反之亦然,但它仍然显示警告并在执行时获取错误。我试了一下
(flags & UInt32(kSCNetworkFlagsReachable))
(Int(flags) & (kSCNetworkFlagsReachable))
(flags & (kSCNetworkFlagsReachable) as! UInt32)
(flags as! Int & (kSCNetworkFlagsReachable))
但什么都没用。有人能解决吗
SCNetworkReachabilityFlags的内容
public struct SCNetworkReachabilityFlags : OptionSetType {
public init(rawValue: UInt32)
public static var TransientConnection: SCNetworkReachabilityFlags { get }
public static var Reachable: SCNetworkReachabilityFlags { get }
public static var ConnectionRequired: SCNetworkReachabilityFlags { get }
public static var ConnectionOnTraffic: SCNetworkReachabilityFlags { get }
public static var InterventionRequired: SCNetworkReachabilityFlags { get }
public static var ConnectionOnDemand: SCNetworkReachabilityFlags { get } // __OSX_AVAILABLE_STARTING(__MAC_10_6,__IPHONE_3_0)
public static var IsLocalAddress: SCNetworkReachabilityFlags { get }
public static var IsDirect: SCNetworkReachabilityFlags { get }
public static var IsWWAN: SCNetworkReachabilityFlags { get }
// TARGET_OS_IPHONE
public static var ConnectionAutomatic: SCNetworkReachabilityFlags { get }
}
最佳答案
试着去吧
let isReachable = flags.contains(SCNetworkReachabilityFlags.Reachable)
let needsConnection = flags.contains(SCNetworkReachabilityFlags.ConnectionRequired)
OptionSetType对于contains有一个方便的方法,因此希望可以检查是否设置了标志
关于ios - 二进制运算符“&”不能应用于类型为“SCNetworkReachabilityFlags”和“Int”的操作数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34260333/