swift 全局监听网络状态_swift alamofire监听网络状态 - CSDN
  • 最近做个项目,需要实时的监听网络连接状态网络连接断开时需要提醒用户手动打开网络网络重新连接上之后需要做些操作。

    最近项目里有个新需求,需要实时的监听网络连接状态,网络连接断开时需要提醒用户手动打开网络,网络重新连接上之后需要做些操作。

    如何实现实时监听网络连接状态?

    第一步,需要引入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, name: ReachabilityChangedNotification, 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)
        }
        /********************************************** 网络状态监听部分(结束) **********************************************/
    
    

    已在真机上测试成功,切换网络状态时控制台能输出对应的Log。

    展开全文
  • swift 监听网络变化

    2016-10-19 09:00:19
    第一步,需要引入Reachability.Swift文件 网上自行百度在AppDelegate中使用 //判断当前网络是否可用 func appDelegateCheckNetWork(){ do { reachability = try Reachability.reachabilityForInternetCo

    第一步,需要引入Reachability.swift文件 网上自行百度
    在AppDelegate中使用
    //判断当前网络是否可用
        func appDelegateCheckNetWork(){
            
            
            do {
                reachability = try Reachability.reachabilityForInternetConnection()
            } catch {
                print("appDelegate:Unable to create Reachability")
                return
            }
            if reachability.isReachable() {
                print("appDelegate:网络连接:可用")
                netWorkIsAvailable = true
            } else {
                print("appDelegate:网络连接:不可用")
                netWorkIsAvailable = false
            }
            
            // 检测网络类型
            if reachability.isReachableViaWiFi() {
                print("appDelegate:网络类型:Wifi")
            } else if reachability.isReachableViaWWAN() {
                print("appDelegate:网络类型:移动网络")
            } else {
                print("appDelegate:网络类型:无网络连接")
            }
               }
        
        //开启网络监听
        func monitorNetWork(){
            
           reachability = try Reachability.reachabilityForInternetConnection()
            
            reachability.whenReachable = { reachability in
            
            self.netWorkIsAvailable = true
            // 判断网络状态及类型
            print("网络可用")
            }
            
            // 网络不可用时执行
            reachability.whenUnreachable = { reachability in
            self.netWorkIsAvailable = false
            // 判断网络状态及类型
            print("网络不可用")
            }
            
            do {
            // 开始监听
            try reachability.startNotifier()
            } catch {
            print("AppDelegate:Unable to start notifier")
            }
            
        
        }
        
       
    


    方法二:viewController中调用

      /************************* 网络状态监听部分(开始) *************************/
         
         /**
         通过消息自动监听网络改变
         添加消息监听
         */
        
        func NetworkStatusListener() {
            // 1、设置网络状态消息监听
            NSNotificationCenter.defaultCenter().addObserver(self, selector:"networkStatusChange", name: ReachabilityChangedNotification, object: nil);
            
            // 2、获得网络Reachability对象
            // Reachability必须一直存在,所以需要设置为全局变量
            conn = Reachability.reachabilityForInternetConnection()!;
            // 3、开启网络状态消息监听
            conn!.startNotifier();
        }
        
        func networkStatusChange() {
            checkNetworkStatus();
        }
        
        /**
         移除消息通知
         */
        deinit {
            // 关闭网络状态消息监听
            conn!.stopNotifier();
            // 移除网络状态消息通知
            NSNotificationCenter.defaultCenter().removeObserver(self);
        }
        
        /**
         主动检测网络状态
         */
        func checkNetworkStatus() {
            let reachability = Reachability.reachabilityForInternetConnection() // 准备获取网络连接信息
            
            if reachability!.isReachable() { // 判断网络连接状态
                print("网络连接:可用")
                if reachability!.isReachableViaWiFi() { // 判断网络连接类型
                    print("连接类型:WiFi")
                } else if reachability!.isReachableViaWWAN() {
                    print("连接类型:移动网络")
                }
            }else{
                print("网络连接:不可用")
                print("连接类型:没有网络连接")
            }
        }
        /********************* 网络状态监听部分(结束) *************************/
    </pre><p></p><pre name="code" class="html">

    监听网络变化参考:

    http://blog.csdn.net/json_vip/article/details/51754881

    http://blog.csdn.net/zhang5690800/article/details/51995716

    展开全文
  • //属性监听器本质是闭包 class Person: NSObject{ var name:String? {//属性后面加一对大括号称为属性监听器 //属性即将进行改变时监听 willSet{ print("11111") print(newValue)//系统的临时变量,用来保
    import UIKit
    
    
    //属性监听器本质是闭包
    class Person: NSObject{
        var name:String? {//属性后面加一对大括号称为属性监听器
            //属性即将进行改变时监听
            willSet{
                print("11111")
                print(newValue)//系统的临时变量,用来保存即将要赋的值
            }
            //属性已经改变时进行监听
            didSet{
                print("22222")
                print(oldValue)//系统的临时变量,用来保存属性改变前的值
            }
        }
        
    }
    
    let p = Person()
    p.name = "zhengyanfeng"
    
    		

    展开全文
  • 在项目中使用文本输入框出...下面介绍在swift3中两种常用方式方式一: 全局通知1.注册通知 在合适位置注册监听UITextView文本变化的全局通知 //UITextView 监听开始输入的两种方法 //方法一:通知 NotificationCent

    在项目中使用文本输入框出UITextField之外还会经常使用 UITextView ,难免会有需求监听UITextView文本框内文本数量.下面介绍在swift3中两种常用方式

    方式一: 全局通知

    1.注册通知
    在合适位置注册监听UITextView文本变化的全局通知

     //UITextView 监听开始输入的两种方法
            //方法一:通知
            NotificationCenter.default.addObserver(self, selector: #selector(ComposeVC.textViewChange), name: NSNotification.Name.UITextViewTextDidChange, object: nil)

    2.实现监听方法 此处方法名为 textViewChange

    @objc fileprivate func textViewChange() {
            XWLog("textView文字改变 :\(composeTextView.text)")
    }

    3.在控制器销魂不忘销魂通知

    //移除通知
        deinit {
            NotificationCenter.default.removeObserver(self)
        }

    方式二: 代理

    1.设置代理

    //1.设置代理
    composeTextView.delegate = self

    2.遵守代理协议,实现代理方法

    //MARK: - TEXTVIEW DELEGATE
    extension ComposeVC : UITextViewDelegate {
        func textViewDidChange(_ textView: UITextView) {
            if textView.text.lengthOfBytes(using: .utf8) > 0 {
                //文本框内有文字个数大于0 进行相应操作
    
            }else{
                //文本框内有文字个数等于0 进行相应操作
    
            }
        }
    }
    展开全文
  • 通过AFNetworking监听判断网络连接状态 网络状态消息监听
  • 实际iOS开发中,在网络... 楼主有简单的耍了下主流的app,发现绝大部分都没有对 网络状态做实时的监听,QQ 和 微信 有做,但是这2个用的都是socket,所以第一时间侦听到了网络状态。在无网络情况下,重新连接到网络
  • macOS - 监听全局事件

    2020-04-13 17:52:04
    在macOS开发中,我们时常会有一些要监听鼠标或者键盘全局事件的需求, 比如按下option键,显示view 代码: - (void)awakeFromNib { [super awakeFromNib]; if (self) { __weak typeof(self) weakSelf = self; ...
  • 主要实现的功能是,当NSApp非active状态时候,右键app,会弹出筛选的window/View, 但是此时App不是活跃状态,所以在applicationDidFinishLaunching 定义全局的monitor,可以监控到app外边的键盘或者其他事件的点击...
  • Swift3.0拨打电话,获取通话状态(接通,挂断...),CallKit.CXCallObserver> 基于Swift3.0的一个循环拨打电话的小功能的,直到接通为止
  • 在移动开发过程中,对于网络状态的监测尤为重要 直接上代码 /** 通过消息自动监听网络改变 添加消息监听 */ func autoNetworkStatus() { // 1、设置网络状态消息监听 NSNotificationCenter.defaultCenter()...
  • ios app监听屏幕状态

    2016-07-13 05:41:17
    请问,安卓可以实现监听屏幕熄灭和点亮的操作,ios可不可以通过程序监听实现获取屏幕点亮和熄灭的状态
  • 窥探Swift编程之错误处理与异常抛出
  • 英语原文地址:Dark Mode: Adding support to your app in Swift - SwiftLee Dark Mode在iOS 13中引入,并在WWDC 2019上宣布。它为iOS添加了更暗的主题,并允许您对应用执行相同的操作。这是给用户的绝佳补充,使...
  • swift通知快速创建

    2018-07-20 09:58:13
    Swift - 使用NotificationCenter发送通知,接收通知 直接监控系统方法 var backgroundObserver :NSObjectProtocol? // object必须是nil,否则貌似没反应 backgroundObserver = NoticeCenter.addObserver...
  • 定义两个宏:  //监听锁屏事件 #define kNotificationLock CFSTR(...//监听屏幕状态变化事件 #define kNotificationChange CFSTR("com.apple.springboard.lockstate") 注册达尔文通知: 注意此处CFNotificationCe
  • 根据项目需求,要求监听用户是否真的拨打电话以及打电话时长! 直接上代码咯。。。 private var beforeDate : Date! private var callCenter : Any?//声明属性(注意:这里必须是全局属性,不能定义局部变量,...
  • iOS开发监听屏幕截屏事件 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleUserDidTakeScreenshotNotification:) name:UIApplicationUserDidTakeScreenshotNotification object:...
  • XCode调试 设置全局断点并快速定位问题代码所在行 摘要: XCode调试技巧 设置全局断点并快速定位问题代码所在行是本文要介绍的内容,很多时候,在调试程序的时候,我们很想马上知道错误的代码在哪一行...
  • // In the view controller where you create the subviews // (not sure from your question, but I think you are adding image views to a scroll view UIView *view = [[UIView alloc] init];...
  • 一:访客界面效果如图 二:xib封装访客视图的view 1:业务逻辑分析:1:由于用户未登录时要显示访客视图,要先进行判断用户是否登录,未登录则显示访客视图,登录则显示正常的登陆界面,由于要在四个子控制...
1 2 3 4 5 ... 20
收藏数 1,460
精华内容 584
关键字:

swift 全局监听网络状态