最近做个项目,需要实时的监听网络连接状态,网络连接断开时需要提醒用户手动打开网络,网络重新连接上之后需要做些操作。身为小白的我感到很有压力,所以就不自觉的又上度娘那里去取经了。(哈哈,初学者嘛,大家理解)自己整理下,加深下印象以后也方便用 :)

下面直入正题,如何实现实时监听网络连接状态:
第一步,需要引入Reachability.swift文件
(下载链接:https://github.com/ashleymills/Reachability.swift)

Just drop the Reachability.swift file into your project. That’s it!
(直接找到Reachability.swift文件拖到你的项目中就可以啦。)

第二步,进入到ViewController文件

/********************************************** 网络状态监听部分(开始) **********************************************/
    // Reachability必须一直存在,所以需要设置为全局变量
    let reachability = Reachability()!

    func NetworkStatusListener() {
        // 1、设置网络状态消息监听 2、获得网络Reachability对象
        NotificationCenter.default.addobserver(self,selector: #selector(self.reachabilityChanged),name: ReachabilityChangednotification,object: reachability)
        do{
            // 3、开启网络状态消息监听
            try reachability.startNotifier()
        }catch{
            print("Could not start reachability notifier")
        }
    }

    // 移除消息通知
    deinit {
        // 关闭网络状态消息监听
        reachability.stopNotifier()
        // 移除网络状态消息通知
        NotificationCenter.default.removeObserver(self,object: reachability)
    }

    // 主动检测网络状态
    func reachabilityChanged(note: NSNotification) {

        let reachability = note.object as! Reachability // 准备获取网络连接信息

        if reachability.isReachable { // 判断网络连接状态
            print("网络连接:可用")
            if reachability.isReachableViaWiFi { // 判断网络连接类型
                print("连接类型:WiFi")
                // strServerInternetAddRSS = getHostAddress_WLAN() // 获取主机IP地址 192.168.31.2 小米路由器
                // processClientSocket(strServerInternetAddRSS) // 初始化Socket并连接,还得恢复按钮可用
            } else {
                print("连接类型:移动网络")
                // getHostAddRSS_GPRS() // 通过外网获取主机IP地址,并且初始化Socket并建立连接
            }
        } else {
            print("网络连接:不可用")
            dispatchQueue.main.async { // 不加这句导致界面还没初始化完成就打开警告框,这样不行
                self.alert_noNetwrok() // 警告框,提示没有网络
            }
        }
    }

    // 警告框,提示没有连接网络 *********************
    func alert_noNetwrok() -> Void {
        let alert = UIAlertController(title: "系统提示",message: "请打开网络连接",preferredStyle: .alert)
        let cancelAction = UIAlertAction(title: "确定",style: .default,handler: nil)
        alert.addAction(cancelAction)
        self.present(alert,animated: true,completion: nil)
    }
    /********************************************** 网络状态监听部分(结束) **********************************************/

如果编译无误的话,运行程序后在电脑上输出些内容,这是尝试切换网络状态试试,有没有提示。我自己在真机上测试成功。

大家加油!

Swift实时监听网络状态更新到Swift3的更多相关文章

  1. 你如何将xcode项目转换为cocoapod?

    我有一段代码,我发现我在多个不同的项目中重复使用,所以我想把它变成一个cocoapod并使用私人cocoapod仓库.我的问题是如何将xcode项目设置为cocoapod?它应该是一个静态库还是一个带有appdelegate的空“项目”?

  2. iOS:reachabilityWithHostname YES虽然它应该是NO

    即应用程序不断检查给定的主机是否真的可以访问?开发人员可以创建网络连接并尝试连接到主机并查看它是通过还是失败.然而有趣的是,如果提供像“www.hjjkhkhk.com”这样的无效主机,iOS系统会将可达性视为错误.现在的问题是iOS系统如何在不向外界发送任何查询的情况下找到有效或无效的主机?可能是它定期缓存DNS范围列表???

  3. 如何从iOS可达性类更改网络连接通知?

    解决方法我使用appdelegate中的变量将当前网络状态存储为bool.M

  4. 在iOS中检查Internet连接的最佳方法

    如果谷歌关闭怎么办?如果该应用在不允许使用google.com的国家/地区使用,结果是什么?因此,如果这些选项是正确的方式,或者有更好的方法来检查互联网,保证100%的结果,并且在IPv4和IPv6网络中均可使用,那么我一直处于选择的选择中.任何人都可以建议我哪个选项更好或者我应该采取其他方法,有什么是更好的方法来实现这一目标.非常感谢您的回复.解决方法对于Swift3,Xcode8……

  5. swift 监测网络状态

    一、说明监测网络状态的意义:1.通过对网络状态的监控,可以让应用在联网与不联网这两种状态中,做出相应的响应2.及提醒用户,现在是处在什么网络状态下。

  6. Swift实时监听网络状态更新到Swift3

    (直接找到Reachability.swift文件拖到你的项目中就可以啦。)第二步,进入到ViewController文件如果编译无误的话,运行程序后在电脑上输出些内容,这是尝试切换网络状态试试,有没有提示。我自己在真机上测试成功。

  7. swift 监听网络变化

    方法二:viewController中调用监听网络变化参考:http://blog.csdn.net/json_vip/article/details/51754881http://blog.csdn.net/zhang5690800/article/details/51995716

  8. Swift - 判端网络连接状态,连接类型3G还是Wifi

    1,Reachability.swift是一个使用Swift写的第三方网络检测类。可以测试网络是否连接,并支持3G和Wifi的检测。overridefuncviewDidLoad(){super.viewDidLoad()}@IBActioncheckConnect{letreachability=Reachability.reachabilityForInternetConnection()//判断连接状态ifreachability!.isReachable(){statusLabel.text="网

  9. Swift 2 – UnsafeMutablePointer到对象

    如果我有一个方法如:如何从contextPtr获取对象?

  10. 检查Swift中的网络状态

    如何在Swift中检查网络状态?在Objective-C中Reachability.h.m文件可用.现在怎么办?我如何检查我是在线还是离线?您仍然可以在Swift中使用可达性.Logan对于如何将objective-c文件添加到桥接头here中有一个很好的答案.一旦您设置了桥接头,就可以从Swift代码调用Reachability方法.这样的事情会起作用:

随机推荐

  1. Swift UITextField,UITextView,UISegmentedControl,UISwitch

    下面我们通过一个demo来简单的实现下这些控件的功能.首先,我们拖将这几个控件拖到storyboard,并关联上相应的属性和动作.如图:关联上属性和动作后,看看实现的代码:

  2. swift UISlider,UIStepper

    我们用两个label来显示slider和stepper的值.再用张图片来显示改变stepper值的效果.首先,这三个控件需要全局变量声明如下然后,我们对所有的控件做个简单的布局:最后,当slider的值改变时,我们用一个label来显示值的变化,同样,用另一个label来显示stepper值的变化,并改变图片的大小:实现效果如下:

  3. preferredFontForTextStyle字体设置之更改

    即:

  4. Swift没有异常处理,遇到功能性错误怎么办?

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  5. 字典实战和UIKit初探

    ios中数组和字典的应用Applicationschedule类别子项类别名称优先级数据包contactsentertainment接触UIKit学习用Swift调用CocoaTouchimportUIKitletcolors=[]varbackView=UIView(frame:CGRectMake(0.0,0.0,320.0,CGFloat(colors.count*50)))backView

  6. swift语言IOS8开发战记21 Core Data2

    上一话中我们简单地介绍了一些coredata的基本知识,这一话我们通过编程来实现coredata的使用。还记得我们在coredata中定义的那个Model么,上面这段代码会加载这个Model。定义完方法之后,我们对coredata的准备都已经完成了。最后强调一点,coredata并不是数据库,它只是一个框架,协助我们进行数据库操作,它并不关心我们把数据存到哪里。

  7. swift语言IOS8开发战记22 Core Data3

    上一话我们定义了与coredata有关的变量和方法,做足了准备工作,这一话我们来试试能不能成功。首先打开上一话中生成的Info类,在其中引用头文件的地方添加一个@objc,不然后面会报错,我也不知道为什么。

  8. swift实战小程序1天气预报

    在有一定swift基础的情况下,让我们来做一些小程序练练手,今天来试试做一个简单地天气预报。然后在btnpressed方法中依旧增加loadWeather方法.在loadWeather方法中加上信息的显示语句:运行一下看看效果,如图:虽然显示出来了,但是我们的text是可编辑状态的,在storyboard中勾选Editable,再次运行:大功告成,而且现在每次单击按钮,就会重新请求天气情况,大家也来试试吧。

  9. 【iOS学习01】swift ? and !  的学习

    如果不初始化就会报错。

  10. swift语言IOS8开发战记23 Core Data4

    接着我们需要把我们的Rest类变成一个被coredata管理的类,点开Rest类,作如下修改:关键字@NSManaged的作用是与实体中对应的属性通信,BinaryData对应的类型是NSData,CoreData没有布尔属性,只能用0和1来区分。进行如下操作,输入类名:建立好之后因为我们之前写的代码有些地方并不适用于coredata,所以编译器会报错,现在来一一解决。

返回
顶部