2016-11-11 76 views
1

我试过检查在斯威夫特3互联网连接,但代码不适合我。如何检查在Swift 3或Swift 4中的Internet连接?

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框架。请建议如何检查。

+1

定义 “不工作”。 – rmaddy

+0

您可以查看此链接以供参考。它包含连接或断开连接时的网络检查。 http://stackoverflow.com/questions/40066530/my-reachability-notifier-is-only-able-to-be-called-once/40068225#40068225 –

回答

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) 
} 

problemstucks.com

+1

如果你连接到一个Wi-Fi但不能够连接到互联网(打开谷歌页面),它仍然返回true为可及。这是不对的。 –

0

最新swift3代码

这里最简单的检查互联网连接的方式是使用iOS可达API。检查这个波纹管链接并下载添加可达文件到您的项目。你必须和应该加入systemconfiguration框架添加到项目

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

上述工作完成后只需编写代码来检查网络connection.here我写一些警报信息也。

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") 
    } 


} 
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() 

     } 
    }