¿Cómo determinar el tipo de connection iOS (Edge, 3G, 4G, Wifi)?

¿Cómo es posible determinar el tipo de connection de iOS?

Quiero saber si hay Edge, 3G, 4G oder Wifi disponibles en este momento en mi dispositivo.

Esta información necesito cargar diferentes datos con un tamaño diferente.

Por lo tanto, no quiero cargar una image de 4 MB con un tipo de connection "Edge".

Para swift podemos usar la siguiente function:

func getNetworkType()->String { do{ let reachability:Reachability = try Reachability.reachabilityForInternetConnection() do{ try reachability.startNotifier() let status = reachability.currentReachabilityStatus if(status == .NotReachable){ return "" }else if (status == .ReachableViaWiFi){ return "Wifi" }else if (status == .ReachableViaWWAN){ let networkInfo = CTTelephonyNetworkInfo() let carrierType = networkInfo.currentRadioAccessTechnology switch carrierType{ case CTRadioAccessTechnologyGPRS?,CTRadioAccessTechnologyEdge?,CTRadioAccessTechnologyCDMA1x?: return "2G" case CTRadioAccessTechnologyWCDMA?,CTRadioAccessTechnologyHSDPA?,CTRadioAccessTechnologyHSUPA?,CTRadioAccessTechnologyCDMAEVDORev0?,CTRadioAccessTechnologyCDMAEVDORevA?,CTRadioAccessTechnologyCDMAEVDORevB?,CTRadioAccessTechnologyeHRPD?: return "3G" case CTRadioAccessTechnologyLTE?: return "4G" default: return "" } }else{ return "" } }catch{ return "" } }catch{ return "" } } 

Puede usar la class CTTelephonyNetworkInfo de Apple. Puedes usar esta API en iOS 7+

Necesita importarlo: @import CoreTelephony

Se necesita CoreTelephony.framework.

 let networkInfo = CTTelephonyNetworkInfo() let networkString = networkInfo.currentRadioAccessTechnology if networkString == CTRadioAccessTechnologyLTE{ // LTE (4G) }else if networkString == CTRadioAccessTechnologyWCDMA{ // 3G }else if networkString == CTRadioAccessTechnologyEdge{ // EDGE (2G) } 

en el objective C:

primera import @import CoreTelephony.

 Reachability *reachability = [Reachability reachabilityForInternetConnection]; [reachability startNotifier]; NetworkStatus status = [reachability currentReachabilityStatus]; if(status == NotReachable) { //No internet } else if (status == ReachableViaWiFi) { //WiFi } else if (status == ReachableViaWWAN) { CTTelephonyNetworkInfo *netinfo = [[CTTelephonyNetworkInfo alloc] init]; NSString * carrierType = netinfo.currentRadioAccessTechnology; if ([carrierType isEqualToString:CTRadioAccessTechnologyGPRS]) { // @"2G"; } else if ([carrierType isEqualToString:CTRadioAccessTechnologyEdge]) { // @"2G"; } else if ([carrierType isEqualToString:CTRadioAccessTechnologyWCDMA]) { // @"3G"; } else if ([carrierType isEqualToString:CTRadioAccessTechnologyHSDPA]) { // @"3G"; } else if ([carrierType isEqualToString:CTRadioAccessTechnologyHSUPA]) { // @"3G"; } else if ([carrierType isEqualToString:CTRadioAccessTechnologyCDMA1x]) { // @"2G"; } else if ([carrierType isEqualToString:CTRadioAccessTechnologyCDMAEVDORev0]) { // @"3G"; } else if ([carrierType isEqualToString:CTRadioAccessTechnologyCDMAEVDORevA]) { // @"3G"; } else if ([carrierType isEqualToString:CTRadioAccessTechnologyCDMAEVDORevB]) { // @"3G"; } else if ([carrierType isEqualToString:CTRadioAccessTechnologyeHRPD]) { // @"3G"; } else if ([carrierType isEqualToString:CTRadioAccessTechnologyLTE]) { // @"4G"; } } 
 import CoreTelephony enum RadioAccessTechnology: String { case cdma = "CTRadioAccessTechnologyCDMA1x" case edge = "CTRadioAccessTechnologyEdge" case gprs = "CTRadioAccessTechnologyGPRS" case hrpd = "CTRadioAccessTechnologyeHRPD" case hsdpa = "CTRadioAccessTechnologyHSDPA" case hsupa = "CTRadioAccessTechnologyHSUPA" case lte = "CTRadioAccessTechnologyLTE" case rev0 = "CTRadioAccessTechnologyCDMAEVDORev0" case revA = "CTRadioAccessTechnologyCDMAEVDORevA" case revB = "CTRadioAccessTechnologyCDMAEVDORevB" case wcdma = "CTRadioAccessTechnologyWCDMA" var description: String { switch self { case .gprs, .edge, .cdma: return "2G" case .lte: return "4G" default: return "3G" } } } // Example: let networkInfo = CTTelephonyNetworkInfo() let networkString = networkInfo.currentRadioAccessTechnology let tecnology = RadioAccessTechnology(rawValue: networkString) print(tecnology.description)