2016-10-12 2 views
0

Quelqu'un peut-il m'aider à trouver un moyen de détecter si une connexion Internet est disponible avec Swift 3?Détecter si une connexion Internet est disponible (WIFI et 4G) sur SWIFT 3

J'utilise le code suivant:

import Foundation 
import SystemConfiguration 

public class Reachability { 

    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(to: &zeroAddress) { 
      SCNetworkReachabilityCreateWithAddress(kCFAllocatorDefault, UnsafePointer) 
     } 

     var flags: SCNetworkReachabilityFlags = SCNetworkReachabilityFlags(rawValue: 0) 
     if SCNetworkReachabilityGetFlags(defaultRouteReachability!, &flags) == false { 
      return false 
     } 
     let isReachable = flags == .reachable 
     let needsConnection = flags == .connectionRequired 

     return isReachable && !needsConnection 
    } 
} 

mais j'ai un message d'erreur:

Error Message

+0

Bienvenue sur StackOverflow! Avant de poser une nouvelle question, veuillez effectuer une recherche (ici ou sur Google) pour savoir si quelqu'un vous a déjà posé la même question auparavant. –

+0

Essayez la classe 'Reachability.swift' –

+0

http://stackoverflow.com/a/25623647/1187415 a été mis à jour pour Swift 3 il y a un certain temps. –

Répondre

4

J'utilise une fonction de joignabilité légèrement différente. Essayez le mien. Il devrait fonctionner pour vous. Je l'utilise dans presque toutes mes applications et je n'ai aucun problème avec ça.

Écrit dans swift3

import Foundation 
import SystemConfiguration 

open class Reachability { 

    class func isConnectedToNetwork() -> Bool { 

     var zeroAddress = sockaddr_in() 
     zeroAddress.sin_len = UInt8(MemoryLayout.size(ofValue: zeroAddress)) 
     zeroAddress.sin_family = sa_family_t(AF_INET) 

     guard let defaultRouteReachability = withUnsafePointer(to: &zeroAddress , { 
      $0.withMemoryRebound(to: sockaddr.self, capacity: 1) {zeroSockAddress in 
       SCNetworkReachabilityCreateWithAddress(nil, zeroSockAddress) 
      } 
     }) else { 
      return false 
     } 

     var flags : SCNetworkReachabilityFlags = [] 
     if !SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags) { 
      return false 
     } 

     let isReachable = flags.contains(.reachable) 
     let needsConnection = flags.contains(.connectionRequired) 
     return (isReachable && !needsConnection) 
    } 

} 

Appelée par:

if Reachability.isConnectedToNetwork() == true { 
    xy 
} else { 
    yz 
} 
+0

merci de me le faire savoir @rmaddy, je vais éditer peut répondre –

+0

Merci David pour votre aide. Cela a fonctionné pour moi; J'ai utilisé votre code. – Patrick

+0

Okay. Heureux de vous aider. J'ai upvoted votre question. J'espère que les autres utilisateurs suivront mon exemple, donc vous obtenez une valeur positive. –