首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Swift 3或Swift 4中检查互联网连接?

如何在Swift 3或Swift 4中检查互联网连接?
EN

Stack Overflow用户
提问于 2016-11-11 12:31:53
回答 3查看 12.8K关注 0票数 3

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

代码语言:javascript
复制
 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框架。请建议如何检查。

EN

回答 3

Stack Overflow用户

发布于 2017-03-26 16:59:26

最新的swift3代码

在这里,检查互联网连接的最简单方法是使用iOS reachability。选中以下链接并下载将可访问性文件添加到您的项目中必须且应该添加.you系统配置框架已添加到项目中

代码语言:javascript
复制
 [1]: https://github.com/ashleymills/Reachability.swift/tree/feature/ios10

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

代码语言:javascript
复制
    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")
    }


}
票数 1
EN

Stack Overflow用户

发布于 2016-11-11 14:11:59

代码语言:javascript
复制
   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

票数 0
EN

Stack Overflow用户

发布于 2017-11-21 12:38:16

在Alamofire的情况下

代码语言:javascript
复制
import Alamofire

//添加到您的viewDidLoad()或AppDelegate中,如下所示

代码语言:javascript
复制
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()

        }
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40541141

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档