2016-02-16 5 views
10

I Funktionalität mit Alamofire NetworkReachabilityManager in Swift in Objective-C zu AFNetworking ähnlich wollen:So verwenden NetworkReachabilityManager in Alamofire

//Reachability detection 
[[AFNetworkReachabilityManager sharedManager] startMonitoring]; 
[[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { 
    switch (status) { 
     case AFNetworkReachabilityStatusReachableViaWWAN: { 
      [self LoadNoInternetView:NO]; 
      break; 
     } 
     case AFNetworkReachabilityStatusReachableViaWiFi: { 
      [self LoadNoInternetView:NO]; 
      break; 
     } 
     case AFNetworkReachabilityStatusNotReachable: { 
      break; 
     } 
     default: { 
      break; 
     } 
    } 
}]; 

ich zur Zeit den Hörer bin mit dem Status ändert sich mit Netzwerk wissen

let net = NetworkReachabilityManager() 
net?.startListening() 

Kann jemand beschreiben, wie diese Anwendungsfälle unterstützt werden?

Antwort

12

fand ich die Antwort ich d.h durch nur einen Zuhörer mit Verschluss zu schreiben, wie unten erwähnt:

let net = NetworkReachabilityManager() 
net?.startListening() 

net?.listener = { status in 
    if net?.isReachable ?? false { 

    switch status { 

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

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

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

    case .unknown : 
     print("It is unknown whether the network is reachable") 

    } 
} 
14

Hier ist meine Implementierung. Ich benutze es in einem Singleton. Denken Sie daran, die Referenz des Erreichbarkeitsmanagers beizubehalten.

let reachabilityManager = Alamofire.NetworkReachabilityManager(host: "www.apple.com") 

func listenForReachability() { 
    self.reachabilityManager?.listener = { status in 
     print("Network Status Changed: \(status)") 
     switch status { 
     case .NotReachable: 
      //Show error state 
     case .Reachable(_), .Unknown: 
      //Hide error state 
     } 
    } 

    self.reachabilityManager?.startListening() 
} 
17

Networkmanager Klasse

class NetworkManager { 

//shared instance 
static let shared = NetworkManager() 

let reachabilityManager = Alamofire.NetworkReachabilityManager(host: "www.google.com") 

func startNetworkReachabilityObserver() { 

    reachabilityManager?.listener = { status in 
     switch status { 

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

      case .unknown : 
       print("It is unknown whether the network is reachable") 

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

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

      } 
     } 

     // start listening 
     reachabilityManager?.startListening() 
    } 
} 

Starten Sie Network Erreichbarkeits Observer

@UIApplicationMain 
class AppDelegate: UIResponder, UIApplicationDelegate { 

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 

     // add network reachability observer on app start 
     NetworkManager.shared.startNetworkReachabilityObserver() 

     return true 
    } 
} 
+1

schönes Stück Code – Abdoelrhman

4

ein Singleton verwenden arbeitet, wie ich lange, wie Sie einen Verweis von reachabilityManager halten

class NetworkStatus { 
static let sharedInstance = NetworkStatus() 

private init() {} 

let reachabilityManager = Alamofire.NetworkReachabilityManager(host: "www.apple.com") 

func startNetworkReachabilityObserver() { 
    reachabilityManager?.listener = { status in 

     switch status { 

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

     case .unknown : 
      print("It is unknown whether the network is reachable") 

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

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

     } 
    } 
    reachabilityManager?.startListening() 
} 

So können Sie es wie diese überall in Ihrer Anwendung verwenden:

let networkStatus = NetworkStatus.sharedInstance 

override func awakeFromNib() { 
    super.awakeFromNib() 
    networkStatus.startNetworkReachabilityObserver() 
} 

Sie werden über jede Änderung Ihrer Netzwerkstatus informiert werden. Nur für Sahnehäubchen this ist eine sehr gute Animation auf Ihrem Internet-Verbindung Verlust zu zeigen.