iOS网络(Swift)

原创 2015年11月17日 20:59:54

//

//  NetworkStatus.swift

//

//  Created by A on 15/10/26.

//  Copyright © 2015 A. All rights reserved.

//


import Foundation

import CoreTelephony.CTTelephonyNetworkInfo

import SystemConfiguration.CaptiveNetwork

//import NetworkExtension.NEHotspotHelper


enum NetworkReachable {

    case CanReachable

    case NotReachable

}


enum NetworkType {

    case WiFi

    case Unknown

    case Cellular2G

    case Cellular3G

    case Cellular4G

}


struct NetworkStatus {

    

    func getCurrentWifiInfo() -> (String, String) {

        if let interfaces = CNCopySupportedInterfaces() {

            let if0: UnsafePointer<Void>? = CFArrayGetValueAtIndex(interfaces, 0)

            let interfaceName: CFStringRef = unsafeBitCast(if0!, CFStringRef.self)

            let ssidNSDic = CNCopyCurrentNetworkInfo(interfaceName) as NSDictionary?

            var ssid = String()

            var bssid = String()

            if ssidNSDic != nil { // 未连接WiFi的情况会返回nil

                ssid =  ssidNSDic!["SSID"] as! String

                bssid = ssidNSDic!["BSSID"] as! String

                return (bssid, ssid)

            } else {

                return ("", "")

            }

        }

        return ("", "")

    }

    

    /*

     * 在调用该接口之前一定要用isNetworkReachable()来确保有网络连接

     */

    func currentNetworkType() -> NetworkType {

        

        let networkType = CTTelephonyNetworkInfo().currentRadioAccessTechnology

        if networkType == nil { // 非蜂窝网络下会返回nil

            // 排除是WiFi还是无网络

            if isNetworkReachable() == .CanReachable { // 这下可以判断是Wifi

                return .WiFi

            } else {

                assert(false, "要是仅仅判断有无网络的话就用isNetworkReachable(),该接口是判断网络类型的,你应该在确保有网络的情况下调用该接口")

                return .Unknown

            }

            

        } else {

            switch networkType! {

            case CTRadioAccessTechnologyGPRS:

                return .Cellular2G

            case CTRadioAccessTechnologyEdge:

                return .Cellular2G // 2.75GEDGE网络

            case CTRadioAccessTechnologyWCDMA:

                return .Cellular3G

            case CTRadioAccessTechnologyHSDPA:

                return .Cellular3G // 3.5G网络

            case CTRadioAccessTechnologyHSUPA:

                return .Cellular3G // 3.5G网络

            case CTRadioAccessTechnologyCDMA1x:

                return .Cellular2G // CDMA2G网络

            case CTRadioAccessTechnologyCDMAEVDORev0,

                 CTRadioAccessTechnologyCDMAEVDORevA,

                 CTRadioAccessTechnologyCDMAEVDORevB:

                return .Cellular3G

            case CTRadioAccessTechnologyeHRPD:

                return .Cellular3G // 电信的怪胎,只能算3G

            case CTRadioAccessTechnologyLTE:

                return .Cellular4G

            default:

                return .Unknown

            }

        }

    }

    

    func isNetworkReachable() -> NetworkReachable {

        

        var isCellularReachable = false // wifi 是否连接了

        let networkType = CTTelephonyNetworkInfo().currentRadioAccessTechnology

        if networkType == nil { // 非蜂窝网络下会返回nil

            isCellularReachable = false

        } else {

            isCellularReachable = true

        }

        

        /*

         * there are total three condition

         * 1.not reachable, 2.cellular, 3.wifi

         */

        var isWifiReachable = false // wifi 是否连接了

        if let interfaces = CNCopySupportedInterfaces() {

            let if0: UnsafePointer<Void>? = CFArrayGetValueAtIndex(interfaces, 0)

            let interfaceName: CFStringRef = unsafeBitCast(if0!, CFStringRef.self)

            let ssidNSDic = CNCopyCurrentNetworkInfo(interfaceName) as NSDictionary?

            if ssidNSDic == nil {

                isWifiReachable = false

            } else {

                isWifiReachable = true

            }

        }

        

        if isCellularReachable == false && isWifiReachable == false { // 非蜂窝网络下会返回nil && 未连接WiFi的情况会返回nil

            return .NotReachable

        } else {

            return .CanReachable

        }

    }

    

    var reachable: NetworkReachable {

        get {

            return isNetworkReachable()

        }

    }

    

    var networkType: NetworkType {

        get {

            return currentNetworkType()

        }

    }

    

}

Swift3.0 info.plist文件访问权限汇总

1.相机、相册Privacy - Photo Library Usage Description //相册 - xxx想访问您的相册 Privacy - Camera Usage Descript...
  • C_calary
  • C_calary
  • 2016年11月03日 15:12
  • 1426

swift第一个HelloWord实现

最近在学习swift,任何程序作为入门,总会先要问上一句"HelloWorld!"似乎才算有礼貌,swift也不例外。这里也习惯性的写上一句"HelloWorld!"作为整个课程的学习吧! 开发环境...
  • lijizh1013
  • lijizh1013
  • 2015年10月11日 16:59
  • 696

第一个Swift程序 - Helloworld

系统: OS X Yosemite Version 10.10 IDE:  XCode
  • linyingnan
  • linyingnan
  • 2014年10月20日 16:56
  • 1277

Swift---网络判断封装(可直接使用)

import Foundationclass YJNetWorkManager: NSObject { /** 判断网络类型 - returns:返回值字符串 wifi(kRe...
  • yj229201093
  • yj229201093
  • 2016年07月04日 18:42
  • 667

iOS开发---获取网络时间(百度时间)

- (NSDate *)getInternetDate{     NSString *urlString = @"http://m.baidu.com";     urlString = [url...
  • wujakf
  • wujakf
  • 2017年12月27日 11:49
  • 156

Swift初体验之HelloWord+苹果Swift编程语言入门教程【中文版】

AppDelegate.swift : // // AppDelegate.swift // SwiftHelloWord // // Created by jason on 14-6-5. /...
  • gogler
  • gogler
  • 2014年06月05日 10:19
  • 3181

Swift开发IOS-UIWebView

UIWebView是IOS系统显示网页,UIWebView除了显示网页之外,还可以显示Html语言,CSS,图像,Word文件,Excel表格,Keynote,Numbers,Pages,PDF,PP...
  • tianmaxingkong_
  • tianmaxingkong_
  • 2016年01月13日 02:17
  • 1333

每个ios开发者都应该知道Top 10 Swift三方库

原文:Top 10 iOS Swift libraries every iOS developer should know about swift每天都在变的越来越流行。如果你正开始一个新项目,你有机...
  • tiankong1206
  • tiankong1206
  • 2016年01月20日 17:50
  • 7348

swift基础判断网络连接

import Foundation import SystemConfiguration public class Reachability { class func isConn...
  • lcg910978041
  • lcg910978041
  • 2016年06月16日 01:22
  • 984

使用swift开发OSX应用

原文:http://www.raywenderlich.com/87002/getting-started-with-os-x-and-swift-tutorial-part-1 翻译原文:http...
  • u011349387
  • u011349387
  • 2016年01月03日 17:51
  • 5651
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS网络(Swift)
举报原因:
原因补充:

(最多只允许输入30个字)