3

我曾尝试在 Swift 3 中检查互联网连接,但代码对我不起作用。

 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(MemoryLayout.size(ofValue: zeroAddress))
    zeroAddress.sin_family = sa_family_t(AF_INET)

    let defaultRouteReachability = withUnsafePointer(&zeroAddress) {
      SCNetworkReachabilityCreateWithAddress(nil, UnsafePointer($0)).takeRetainedValue()
    }

    var flags: SCNetworkReachabilityFlags = SCNetworkReachabilityFlags(rawValue: UInt32(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
  }

我还导入了 SystemConfiguration 框架。请建议如何检查。

4

3 回答 3

1

最新的 swift3 代码

这里检查互联网连接的最简单方法是使用 iOS 可达性 API。检查此波纹管链接并下载将可达性文件添加到您的项目。您必须并且应该添加系统配置框架已添加到项目中

 [1]: https://github.com/ashleymills/Reachability.swift/tree/feature/ios10

完成上述工作后,只需编写此代码以检查网络连接。这里我也在编写一些警报消息。

    func networkStatusChanged(_ notification: Notification) {
    let userInfo = (notification as NSNotification).userInfo
    print(userInfo!)
}
func interNetChecking( )   {
    let status = Reach().connectionStatus()


    switch status {
    case .unknown, .offline:

        let alert = UIAlertController(title: "Check", message: "Internet Connection is Required at first time running the app to load images and videos ", preferredStyle: UIAlertControllerStyle.alert)
        alert.addAction(UIAlertAction(title: "Cancel", style: UIAlertActionStyle.default, handler: nil))

        DispatchQueue.main.async(execute: {
            self.present(alert, animated: true, completion: nil)
        })


        print("Not connected")
    case .online(.wwan):
        print("Connected via WWAN")
    case .online(.wiFi):
        print("Connected via WiFi")
    }


}
于 2017-03-26T08:59:25.747 回答
0

在 Alamofire 的情况下

import Alamofire

// 像这样在 viewDidLoad() 或 AppDelegate 中添加

let reachabilityManager = NetworkReachabilityManager()
    reachabilityManager.listener = { status in

        switch status {

        case .notReachable:
            print("The network is not reachable")
            self.onInternetDisconnection()

        case .unknown :
            print("It is unknown whether the network is reachable")
            self.onInternetDisconnection() // not sure what to do for this case

        case .reachable(.ethernetOrWiFi):
            print("The network is reachable over the WiFi connection")
            self.onInternetConnection()

        case .reachable(.wwan):
            print("The network is reachable over the WWAN connection")
            self.onInternetConnection()

        }
    }
于 2017-11-21T04:38:15.713 回答
0
   func isConnectedToNetwork() -> Bool {
    var zeroAddress = sockaddr_in()
    zeroAddress.sin_len = UInt8(sizeofValue(zeroAddress))
    zeroAddress.sin_family = sa_family_t(AF_INET)
    let defaultRouteReachability = withUnsafePointer(&zeroAddress) {
        SCNetworkReachabilityCreateWithAddress(nil, UnsafePointer($0))
    }
    var flags = SCNetworkReachabilityFlags()
    if !SCNetworkReachabilityGetFlags(defaultRouteReachability!, &flags) {
        return false
    }
    let isReachable = (flags.rawValue & UInt32(kSCNetworkFlagsReachable)) != 0
    let needsConnection = (flags.rawValue & UInt32(kSCNetworkFlagsConnectionRequired)) != 0
    return (isReachable && !needsConnection)
}

问题库

于 2016-11-11T06:11:59.057 回答