检查Swift中的网络状态,找不到'〜='接受提供的参数

时间:2014-06-11 16:47:38

标签: swift

我正在使用 Reachability.h 库检查我的swift应用程序中的网络状态。

我在“案例”行中遇到了这个问题:

  

找不到接受提供的'〜='的重载   参数

我该如何解决?

func checkNetworkStatus(){
        var reachability = Reachability()

        var internetReachable = Reachability(hostName: "www.google.es")
        var status: NetworkStatus = internetReachable.currentReachabilityStatus()

        switch(status){
            case NotReachable:
                println("No connection")

            case ReachableViaWiFi:
                println("wifi")

            case ReachableViaWWAN:
                println("Wwan")

        }
    }

解决

我已经解决了:

  

status.value

返回一个整数:

  • 0:没有连接
  • 1:wifi
  • 2:wwan

2 个答案:

答案 0 :(得分:3)

最简单的解决方案是使用以下内容替换NetworkStatus声明:

typedef NS_ENUM(NSInteger, NetworkStatus) {
    NotReachable = 0,
    ReachableViaWiFi,
    ReachableViaWWAN
};

Apple使用NS_ENUMNS_OPTION宏将枚举转换为Swift。但是,未使用此宏声明枚举,并且无法将其直接转换为Swift。

另一种解决方案是添加(NetworkStatus的模式匹配)

func ~=(a: NetworkStatus, b : NetworkStatus) -> Bool {
    return (a.value == b.value)
}

但请注意,default:中也需要switch分支。

答案 1 :(得分:0)

试试这个

import Foundation
import SystemConfiguration


public class ConectionReachability
{

    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 = 0
        if SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags) == 0
        {
            return false
        }

        let isReachable = (flags & UInt32(kSCNetworkFlagsReachable)) != 0
        let needsConnection = (flags & UInt32(kSCNetworkFlagsConnectionRequired)) != 0

        return (isReachable && !needsConnection) ? true : false
    }
}