Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 二进制运算符'&';无法应用于类型为';SCNetworkReachabilityFlags&x27;和';Int';_Ios_Swift_Network Programming_Swift2 - Fatal编程技术网

Ios 二进制运算符'&';无法应用于类型为';SCNetworkReachabilityFlags&x27;和';Int';

Ios 二进制运算符'&';无法应用于类型为';SCNetworkReachabilityFlags&x27;和';Int';,ios,swift,network-programming,swift2,Ios,Swift,Network Programming,Swift2,尝试在我的应用程序中检查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

尝试在我的应用程序中检查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)
有一个方便的contains方法,因此希望它能检查标志是否设置了

let isReachable = flags.contains(SCNetworkReachabilityFlags.Reachable)
let needsConnection = flags.contains(SCNetworkReachabilityFlags.ConnectionRequired)

有一个方便的方法来包含,所以希望检查标志是否设置为

这与C++有什么关系?如果你改变了代码> var标志:SCNETWORKABACTIABYYLFLAGIS=to
var flags:SCNetworkReachabilityFlags=0
有帮助吗?@Fonix No引发错误。在swift2.0中,要设置nil值,必须使用[]而不是nil。然后变量是一个数组,不能对其执行位操作,因此,您可能需要检查数组是否包含
kSCNetworkFlagsReachable
etc@JonathanPotter对不起,标签是一个自动标记建议。但是我认为Swift是C的一个变体,所以同样的概念也可以在C++中,所以我也添加了这个建议标签。这与C++有什么关系?如果你改变了<代码> var标志:SCNetworkReachabilityFlags=[]到
变量标志:SCNetworkReachabilityFlags=0
有帮助吗?@Fonix No,这会引发错误。在swift2.0中,要设置nil值,必须使用[]而不是nil。然后,该变量是一个数组,您不能对其执行逐位操作,因此,您可能需要检查数组是否包含
kSCNetworkFlagsReachable
etc@JonathanPotter抱歉,标签是一个自动标签建议。但是我认为Swift是C的一个变体,所以同样的概念可以在C++中使用,这也是为什么我也添加了建议的标签。没有错误,并显示出完美的答案,效果非常好。没有错误,并显示完美的答案