forked from liufan321/NetReachability
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathNetReachability.swift
60 lines (46 loc) · 1.96 KB
/
NetReachability.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
//
// NetReachability.swift
//
//
// Created by 刘凡 on 15/4/6.
//
//
import Foundation
import SystemConfiguration
public enum NetworkStatus: Printable {
case NotReachable, ReachableViaWiFi, ReachableViaWWAN
public var description: String {
switch self {
case .ReachableViaWWAN:
return "2G/3G/4G"
case .ReachableViaWiFi:
return "WiFi"
case .NotReachable:
return "No Connection"
}
}
}
public class NetReachability {
public class func reachabilityWithHostName(hostName: String) -> NetworkStatus {
let reachability = SCNetworkReachabilityCreateWithName(kCFAllocatorDefault , hostName.cStringUsingEncoding(NSUTF8StringEncoding)!).takeRetainedValue()
var flags: SCNetworkReachabilityFlags = 0
let result = SCNetworkReachabilityGetFlags(reachability, &flags)
if (flags & SCNetworkReachabilityFlags(kSCNetworkReachabilityFlagsReachable) == 0) {
return NetworkStatus.NotReachable;
}
var returnValue = NetworkStatus.NotReachable;
if flags & SCNetworkReachabilityFlags(kSCNetworkReachabilityFlagsConnectionRequired) == 0 {
returnValue = NetworkStatus.ReachableViaWiFi
}
if flags & SCNetworkReachabilityFlags(kSCNetworkReachabilityFlagsConnectionOnDemand) != 0 ||
flags & SCNetworkReachabilityFlags(kSCNetworkReachabilityFlagsConnectionOnTraffic) != 0 {
if flags & SCNetworkReachabilityFlags(kSCNetworkReachabilityFlagsInterventionRequired) == 0 {
returnValue = NetworkStatus.ReachableViaWiFi
}
}
if (flags & SCNetworkReachabilityFlags(kSCNetworkReachabilityFlagsIsWWAN)) == SCNetworkReachabilityFlags(kSCNetworkReachabilityFlagsIsWWAN) {
returnValue = NetworkStatus.ReachableViaWWAN
}
return returnValue;
}
}