ios - Swift/如何检查可达性

标签 ios swift

我正在使用以下代码来检查可达性:

    if Reachability.isConnectedToNetwork() == true {
        xy
    } else {
        yz
    }

我的问题是,如果设备在 Wlan 网络内,可达性总是错误的。在常规 gsm 可达性始终为假。

我该如何解决这个问题?非常感谢您的帮助。

这是我的可达性助手:

import Foundation
import SystemConfiguration

public class Reachability {

    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(kCFAllocatorDefault, UnsafePointer($0))
        }

        var flags: SCNetworkReachabilityFlags = SCNetworkReachabilityFlags(rawValue: 0)
        if SCNetworkReachabilityGetFlags(defaultRouteReachability!, &flags) == false {
            return false
        }

        let isReachable = flags == .Reachable
        let needsConnection = flags == .ConnectionRequired

        return isReachable && !needsConnection

    }
}

最佳答案

我正在使用几乎相同的代码。

import Foundation
import SystemConfiguration

public class Reachability {

    class func isConnectedToNetwork() -> Bool {

        var zeroAddress = sockaddr_in()
        zeroAddress.sin_len = UInt8(sizeofValue(zeroAddress))
        zeroAddress.sin_family = sa_family_t(AF_INET)

        guard let defaultRouteReachability = withUnsafePointer(&zeroAddress, {
            SCNetworkReachabilityCreateWithAddress(nil, UnsafePointer($0))
        }) else {
            return false
        }

        var flags : SCNetworkReachabilityFlags = []
        if !SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags) {
            return false
        }

        let isReachable = flags.contains(.Reachable)
        let needsConnection = flags.contains(.ConnectionRequired)
        return (isReachable && !needsConnection)
    }

}

关于ios - Swift/如何检查可达性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35905687/

相关文章:

swift - NSCollectionViewFlowLayout collectionViewContentSize 更新但 Collection View 框架不更新

iOS - 匹配单词边界的正则表达式,包括下划线

ios - 解析试用期和数据存储限制

ios - UITableView 节标题错误

ios - 带有导致崩溃的约束的自定义 View (xib)

ios - 在 ImageView 上加载图像时内存增加?

ios - Swift 将十进制字符串转换为 UInt8-Array

iphone - 防止 IOS 应用程序在语言更改后重新启动

html - CSS:在任何移动屏幕中将导航居中

exception - EXC_BAD_INSTRUCTION(代码=EXC_I386_INVOP,子代码=0x0)与 dataTaskWithUrl