@@ -11,9 +11,10 @@ class NetworkUtility {
1111 }
1212
1313 var connectionUpdateHandler : ( ConnectionType ) -> Void = { _ in }
14-
1514 private let reachability : Reachability ?
1615
16+ static let shared = NetworkUtility ( )
17+
1718 init ( reachability: Reachability ? = nil ) {
1819 let reachability = reachability ?? ( try ? Reachability ( ) )
1920 self . reachability = reachability
@@ -37,6 +38,19 @@ class NetworkUtility {
3738}
3839
3940extension NetworkUtility {
41+ enum ConnectionType : String , CustomStringConvertible {
42+ case undetermined, none, wifi, cellular
43+ var cellular : CellularType { CellularType . current }
44+ var description : String {
45+ switch self {
46+ case . none: return " None "
47+ case . wifi: return " Wifi "
48+ case . cellular: return CellularType . current. rawValue
49+ case . undetermined: return " Unknown "
50+ }
51+ }
52+ }
53+
4054 enum CellularType : String {
4155 case none, twoG, threeG, fourG, unknown
4256 var rawValue : String {
@@ -50,53 +64,48 @@ extension NetworkUtility {
5064 }
5165
5266 var carrierName : String {
67+ var name = " None "
5368 if ProcessInfo . isRunningDebugSessionSimulator {
54- return " Simulator "
69+ name = " Simulator "
5570 } else {
56- let networkInfo = CTTelephonyNetworkInfo ( )
57- let carrier = networkInfo. subscriberCellularProvider
58- return carrier? . carrierName ?? " None "
71+ #if os(iOS) && !targetEnvironment(macCatalyst)
72+ let networkInfo = CTTelephonyNetworkInfo ( )
73+ let carrier = networkInfo. subscriberCellularProvider
74+ name = carrier? . carrierName ?? name
75+ #endif
5976 }
77+ return name
6078 }
6179
6280 static var current : CellularType {
6381 if ProcessInfo . isRunningDebugSessionSimulator {
6482 return . none
6583 } else {
66- guard let radioAccessTechnology = CTTelephonyNetworkInfo ( ) . currentRadioAccessTechnology else {
84+ #if os(iOS) && !targetEnvironment(macCatalyst)
85+ guard let radioAccessTechnology = CTTelephonyNetworkInfo ( ) . currentRadioAccessTechnology else {
86+ return . none
87+ }
88+ switch radioAccessTechnology {
89+ case CTRadioAccessTechnologyGPRS,
90+ CTRadioAccessTechnologyEdge,
91+ CTRadioAccessTechnologyCDMA1x:
92+ return . twoG
93+ case CTRadioAccessTechnologyWCDMA,
94+ CTRadioAccessTechnologyHSDPA,
95+ CTRadioAccessTechnologyHSUPA,
96+ CTRadioAccessTechnologyCDMAEVDORev0,
97+ CTRadioAccessTechnologyCDMAEVDORevA,
98+ CTRadioAccessTechnologyCDMAEVDORevB,
99+ CTRadioAccessTechnologyeHRPD:
100+ return . threeG
101+ case CTRadioAccessTechnologyLTE:
102+ return . fourG
103+ default :
104+ return . unknown
105+ }
106+ #else
67107 return . none
68- }
69- switch radioAccessTechnology {
70- case CTRadioAccessTechnologyGPRS,
71- CTRadioAccessTechnologyEdge,
72- CTRadioAccessTechnologyCDMA1x:
73- return . twoG
74- case CTRadioAccessTechnologyWCDMA,
75- CTRadioAccessTechnologyHSDPA,
76- CTRadioAccessTechnologyHSUPA,
77- CTRadioAccessTechnologyCDMAEVDORev0,
78- CTRadioAccessTechnologyCDMAEVDORevA,
79- CTRadioAccessTechnologyCDMAEVDORevB,
80- CTRadioAccessTechnologyeHRPD:
81- return . threeG
82- case CTRadioAccessTechnologyLTE:
83- return . fourG
84- default :
85- return . unknown
86- }
87- }
88- }
89- }
90-
91- enum ConnectionType : String , CustomStringConvertible {
92- case undetermined, none, wifi, cellular
93- var cellular : CellularType { CellularType . current }
94- var description : String {
95- switch self {
96- case . none: return " None "
97- case . wifi: return " Wifi "
98- case . cellular: return CellularType . current. rawValue
99- case . undetermined: return " Unknown "
108+ #endif
100109 }
101110 }
102111 }
0 commit comments