如何检查在斯威夫特3或斯威夫特4的互联网连接?

我试图检查在斯威夫特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框架。 请build议如何检查。

  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

最新的swift3代码

这里检查互联网连接的最简单方法是使用iOS可达性api。 检查下面的链接并下载添加可达性文件到你的项目。你必须也应该添加系统configuration框架被添加到项目

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

完成上述工作后,只需编写这个代码来检查networking连接。在这里我正在写一些警报消息。

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

如果是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() } }