1. 程式人生 > >Swift實時監聽網路狀態(更新到Swift3)

Swift實時監聽網路狀態(更新到Swift3)

最近做個專案,需要實時的監聽網路連線狀態,網路連線斷開時需要提醒使用者手動開啟網路,網路重新連線上之後需要做些操作。身為小白的我感到很有壓力,所以就不自覺的又上度娘那裡去取經了。(哈哈,初學者嘛,大家理解)自己整理下,加深下印象以後也方便用 :)

下面直入正題,如何實現實時監聽網路連線狀態:
第一步,需要引入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) } /********************************************** 網路狀態監聽部分(結束) **********************************************/

如果編譯無誤的話,執行程式後在電腦上輸出些內容,這是嘗試切換網路狀態試試,有沒有提示。我自己在真機上測試成功。

大家加油!