2016-11-11 7 views
1

Я попытался проверить подключение к Интернету в Swift 3, но код для меня не работает.Как проверить подключение к Интернету в Swift 3 или Swift 4?

class func isConnectedToNetwork() -> Bool { 

    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)) 
    zeroAddress.sin_len = UInt8(MemoryLayout.size(ofValue: zeroAddress)) 
    zeroAddress.sin_family = sa_family_t(AF_INET) 

    let defaultRouteReachability = withUnsafePointer(&zeroAddress) { 
     SCNetworkReachabilityCreateWithAddress(nil, UnsafePointer($0)).takeRetainedValue() 
    } 

    var flags: SCNetworkReachabilityFlags = SCNetworkReachabilityFlags(rawValue: UInt32(0)) 
    if SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags) == 0 { 
     return false 
    } 

    let isReachable = (flags & UInt32(kSCNetworkFlagsReachable)) != 0 
    let needsConnection = (flags & UInt32(kSCNetworkFlagsConnectionRequired)) != 0 

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

Я также импортировал Framework SystemConfiguration. Пожалуйста, предложите, как проверить.

+1

Определение "не работает". – rmaddy

+0

Вы можете проверить эту ссылку для справки. Он содержит проверку сети при подключении или при отключении. http://stackoverflow.com/questions/40066530/my-reachability-notifier-is-only-able-to-be-called-once/40068225#40068225 –

ответ

0
func isConnectedToNetwork() -> Bool { 
    var zeroAddress = sockaddr_in() 
    zeroAddress.sin_len = UInt8(sizeofValue(zeroAddress)) 
    zeroAddress.sin_family = sa_family_t(AF_INET) 
    let defaultRouteReachability = withUnsafePointer(&zeroAddress) { 
     SCNetworkReachabilityCreateWithAddress(nil, UnsafePointer($0)) 
    } 
    var flags = SCNetworkReachabilityFlags() 
    if !SCNetworkReachabilityGetFlags(defaultRouteReachability!, &flags) { 
     return false 
    } 
    let isReachable = (flags.rawValue & UInt32(kSCNetworkFlagsReachable)) != 0 
    let needsConnection = (flags.rawValue & UInt32(kSCNetworkFlagsConnectionRequired)) != 0 
    return (isReachable && !needsConnection) 
} 

problemstucks.com

+1

Если вы подключены к Wi-Fi, но не можете подключитесь к Интернету (откройте страницу google), но он вернет true для достижимого. Это не правильно. –

0

Последние swift3 код

Здесь Самый простой способ проверить подключение к Интернету, чтобы использовать достижимости апи IOS. проверить эту сильфона ссылку и скачать файл достижимости для ваших проектов .Вы должны и должны быть добавлены рамки SystemConfiguration добавляется к проекту

[1]: https://github.com/ashleymills/Reachability.swift/tree/feature/ios10 

После окончания работы над просто написать этот код для проверки сетевых connection.here я пишу некоторое предупреждающее сообщение.

func networkStatusChanged(_ notification: Notification) { 
    let userInfo = (notification as NSNotification).userInfo 
    print(userInfo!) 
} 
func interNetChecking() { 
    let status = Reach().connectionStatus() 


    switch status { 
    case .unknown, .offline: 

     let alert = UIAlertController(title: "Check", message: "Internet Connection is Required at first time running the app to load images and videos ", preferredStyle: UIAlertControllerStyle.alert) 
     alert.addAction(UIAlertAction(title: "Cancel", style: UIAlertActionStyle.default, handler: nil)) 

     DispatchQueue.main.async(execute: { 
      self.present(alert, animated: true, completion: nil) 
     }) 


     print("Not connected") 
    case .online(.wwan): 
     print("Connected via WWAN") 
    case .online(.wiFi): 
     print("Connected via WiFi") 
    } 


} 
0

В случае Alamofire

import Alamofire 

// Добавить в вашем viewDidLoad() или в AppDelegate как этот

let reachabilityManager = NetworkReachabilityManager() 
    reachabilityManager.listener = { status in 

     switch status { 

     case .notReachable: 
      print("The network is not reachable") 
      self.onInternetDisconnection() 

     case .unknown : 
      print("It is unknown whether the network is reachable") 
      self.onInternetDisconnection() // not sure what to do for this case 

     case .reachable(.ethernetOrWiFi): 
      print("The network is reachable over the WiFi connection") 
      self.onInternetConnection() 

     case .reachable(.wwan): 
      print("The network is reachable over the WWAN connection") 
      self.onInternetConnection() 

     } 
    }