iOS开发——网络编程Swift篇&(一)网络监测

网络监测

 

 1 enum ReachabilityType {

 2     case WWAN,

 3     WiFi,

 4     NotConnected

 5 }

 6 

 7 public class Reachability {

 8     

 9     /**

10     :see: Original post - http://www.chrisdanielson.com/2009/07/22/iphone-network-connectivity-test-example/

11     */

12     class func isConnectedToNetwork() -> Bool {

13         

14         var zeroAddress = sockaddr_in(sin_len: 0, sin_family: 0, sin_port: 0, sin_addr: in_addr(s_addr: 0), sin_zero: (0, 0, 0, 0, 0, 0, 0, 0))

15         zeroAddress.sin_len = UInt8(sizeofValue(zeroAddress))

16         zeroAddress.sin_family = sa_family_t(AF_INET)

17         

18         let defaultRouteReachability = withUnsafePointer(&zeroAddress) {

19             SCNetworkReachabilityCreateWithAddress(nil, UnsafePointer($0)).takeRetainedValue()

20         }

21         

22         var flags: SCNetworkReachabilityFlags = 0

23         if SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags) == 0 {

24             return false

25         }

26         

27         let isReachable = (flags & UInt32(kSCNetworkFlagsReachable)) != 0

28         let needsConnection = (flags & UInt32(kSCNetworkFlagsConnectionRequired)) != 0

29         

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

31     }

32     

33     class func isConnectedToNetworkOfType() -> ReachabilityType {

34         

35         var zeroAddress = sockaddr_in(sin_len: 0, sin_family: 0, sin_port: 0, sin_addr: in_addr(s_addr: 0), sin_zero: (0, 0, 0, 0, 0, 0, 0, 0))

36         zeroAddress.sin_len = UInt8(sizeofValue(zeroAddress))

37         zeroAddress.sin_family = sa_family_t(AF_INET)

38         

39         

40         

41         let defaultRouteReachability = withUnsafePointer(&zeroAddress) {

42             SCNetworkReachabilityCreateWithAddress(nil, UnsafePointer($0)).takeRetainedValue()

43         }

44         

45         var flags: SCNetworkReachabilityFlags = 0

46         if SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags) == 0 {

47             return .NotConnected

48         }

49         

50         let isReachable = (flags & UInt32(kSCNetworkFlagsReachable)) != 0

51         let isWWAN = (flags & UInt32(kSCNetworkReachabilityFlagsIsWWAN)) != 0

52         //let isWifI = (flags & UInt32(kSCNetworkReachabilityFlagsReachable)) != 0

53         

54         if(isReachable && isWWAN){

55             return .WWAN

56         }

57         if(isReachable && !isWWAN){

58             return .WiFi

59         }

60         

61         return .NotConnected

62         //let needsConnection = (flags & UInt32(kSCNetworkFlagsConnectionRequired)) != 0

63         

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

65     }

 使用:

 1     

 2     // MARK: - 检测网络连接情况

 3     @IBOutlet var statusLabel: UILabel!

 4     @IBOutlet var typeLabel: UILabel!

 5     

 6     @IBAction func checkButtonUpinside(sender: UIButton) {

 7         

 8         if Reachability.isConnectedToNetwork() {

 9             statusLabel.text = "网络连接:可用"

10         } else {

11             statusLabel.text = "网络连接:不可用"

12         }

13         

14         let statusType = Reachability.isConnectedToNetworkOfType()

15         switch statusType{

16         case .WWAN:

17             typeLabel.text = "连接类型:移动网络"

18         case .WiFi:

19             typeLabel.text = "连接类型:WiFi"

20             

21         case .NotConnected:

22             typeLabel.text = "连接类型:没有网络连接"

23         }

24     }

 

 
 

你可能感兴趣的:(swift)