网络监测

 enum ReachabilityType {
     case WWAN,
     WiFi,
     NotConnected
 }

 public class Reachability {

     /**
     :see: Original post - http://www.chrisdanielson.com/2009/07/22/iphone-network-connectivity-test-example/
     */
     class func isConnectedToNetwork() -> Bool {

         var zeroAddress = sockaddr_in(sin_len: , sin_family: , sin_port: , sin_addr: in_addr(s_addr: ), sin_zero: (, , , , , , , ))
         zeroAddress.sin_len = UInt8(sizeofValue(zeroAddress))
         zeroAddress.sin_family = sa_family_t(AF_INET)

         let defaultRouteReachability = withUnsafePointer(&zeroAddress) {
             SCNetworkReachabilityCreateWithAddress(nil, UnsafePointer($)).takeRetainedValue()
         }

         var flags: SCNetworkReachabilityFlags =
          {
             return false
         }

         let isReachable = (flags & UInt32(kSCNetworkFlagsReachable)) !=
         let needsConnection = (flags & UInt32(kSCNetworkFlagsConnectionRequired)) != 

         return (isReachable && !needsConnection) ? true : false
     }

     class func isConnectedToNetworkOfType() -> ReachabilityType {

         var zeroAddress = sockaddr_in(sin_len: , sin_family: , sin_port: , sin_addr: in_addr(s_addr: ), sin_zero: (, , , , , , , ))
         zeroAddress.sin_len = UInt8(sizeofValue(zeroAddress))
         zeroAddress.sin_family = sa_family_t(AF_INET)

         let defaultRouteReachability = withUnsafePointer(&zeroAddress) {
             SCNetworkReachabilityCreateWithAddress(nil, UnsafePointer($)).takeRetainedValue()
         }

         var flags: SCNetworkReachabilityFlags =
          {
             return .NotConnected
         }

         let isReachable = (flags & UInt32(kSCNetworkFlagsReachable)) !=
         let isWWAN = (flags & UInt32(kSCNetworkReachabilityFlagsIsWWAN)) !=
         //let isWifI = (flags & UInt32(kSCNetworkReachabilityFlagsReachable)) != 0

         if(isReachable && isWWAN){
             return .WWAN
         }
         if(isReachable && !isWWAN){
             return .WiFi
         }

         return .NotConnected
         //let needsConnection = (flags & UInt32(kSCNetworkFlagsConnectionRequired)) != 0

         //return (isReachable && !needsConnection) ? true : false
     }

使用:

     // MARK: - 检测网络连接情况
     @IBOutlet var statusLabel: UILabel!
     @IBOutlet var typeLabel: UILabel!

     @IBAction func checkButtonUpinside(sender: UIButton) {

         if Reachability.isConnectedToNetwork() {
             statusLabel.text = "网络连接:可用"
         } else {
             statusLabel.text = "网络连接:不可用"
         }

         let statusType = Reachability.isConnectedToNetworkOfType()
         switch statusType{
         case .WWAN:
             typeLabel.text = "连接类型:移动网络"
         case .WiFi:
             typeLabel.text = "连接类型:WiFi"

         case .NotConnected:
             typeLabel.text = "连接类型:没有网络连接"
         }
     }
 
 

最新文章

  1. Spring Security3学习实例
  2. zstu.2512. Moving Tables(贪心)
  3. yii和wp做博客
  4. 简单几何(线段相交) POJ 1410 Intersection
  5. 转:SQL SERVER数据库中实现快速的数据提取和数据分页
  6. Table of Contents - MongoDB
  7. wpf 只在window是ShowDialog打开时才设置DialogResult
  8. C#子线程更新UI控件的方法总结
  9. 每隔一段时间执行一次函数。window.setTimeout
  10. SSAS维度设计中CustomRollupColumn的用法-自定义聚合方式
  11. MarkDown初遇
  12. mysql导出数据表结构,必须退出mysql命令.重新使用msyqldump命令
  13. 【java】读取资源文件key->value,java.util.ResourceBundle
  14. git命令 高级
  15. Https背景与证书在spring boot项目中的使用
  16. 树的广度优先遍历和深度优先遍历(递归非递归、Java实现)
  17. c++11のunique_lock和once_flag
  18. iphone 开发h5 踩过的坑
  19. 第一个SpringBoot程序
  20. Centos7 64位 -- glibc-2.29 编译升级方法(已成功)

热门文章

  1. ashx-auth-黑色简洁验证码
  2. 关于AsyncTask 的退出
  3. 【LeetCode 160】Intersection of Two Linked Lists
  4. Windows下Qt开发环境:OpenGL导入3DMax模型(.3DS)
  5. Oracle11g导入*.dmp数据文件
  6. 【数据结构和算法】 O(1)时间取得栈中的最大 / 最小元素值
  7. TRANSLATE
  8. sublime text2中ctags安装问题的解决
  9. [LeetCode] Add Digits (a New question added)
  10. Tkinter教程之Button篇(1)