2015-11-23 23 views
5

iOS uygulamam başladığında bir yöntem aramak istiyorum, ancak bağlantı olduğunda bu yöntemi çağırmak istiyorum. Objective-C'de Reachable'u kullanabileceğinizi buldum, ancak bu yöntemin Swift'in bir parçası olmadığını görüyoruz.Swift: Bağlantı kaybolduğunda ve geri döndüğünde rapor veren bir dinleyiciye nasıl sahip olabilirim?

Ben Reachability.swift adında bir bölmeyi bulduk ve ben sağlandı örnek kullanıyorum:

override func viewWillAppear(animated: Bool) { 
    let reachability: Reachability 
    do { 
     reachability = try Reachability.reachabilityForInternetConnection() 
    } catch { 
     print("Unable to create Reachability") 
     return 
    } 
    NSNotificationCenter.defaultCenter().addObserver(self, 
     selector: "reachabilityChanged:", 
     name: ReachabilityChangedNotification, 
     object: reachability) 

    do { 
     try reachability.startNotifier() 
    } catch { 
     print("This is not working.") 
      return 
    } 
} 

func reachabilityChanged(note: NSNotification) { 

    let reachability = note.object as! Reachability 

    if reachability.isReachable() { 
     if reachability.isReachableViaWiFi() { 
      print("Reachable via WiFi") 
     } else { 
      print("Reachable via Cellular") 
     } 
    } else { 
     print("Not reachable") 
    } 
} 

Ancak bu düzgün çalışmıyor. Ben sadece bu ViewController'a girdiğimde çalışırım, ama açıp WiFi'yi kapattığımda değil.

var reachability: Reachability! 

Yani bu değişken yönteminin viewWillAppear çıkarılmalıdır:

cevap

11

Ben viewController örneğidir değişken olarak reachability ilan ederek bu sorunu çözmek zorunda.

Swift 2

override func viewWillAppear(animated: Bool) { 
    do { 
     reachability = try Reachability.reachabilityForInternetConnection() 
    } catch { 
     print("Unable to create Reachability") 
     return 
    } 

    NSNotificationCenter.defaultCenter().addObserver(self, 
     selector: "reachabilityChanged:", 
     name: ReachabilityChangedNotification, 
     object: reachability) 

    do { 
     try reachability.startNotifier() 
    } catch { 
     print("This is not working.") 
     return 
    } 

} 

func reachabilityChanged(note: NSNotification) { 

    let reachability = note.object as! Reachability 

    if reachability.isReachable() { 
     if reachability.isReachableViaWiFi() { 
      print("Reachable via WiFi") 
     } else { 
      print("Reachable via Cellular") 
     } 
    } else { 
     print("Not reachable") 
    } 
} 

Swift 3 Bu :) düzgün çalışan

var reachability: Reachability! 
override func viewWillAppear(_ animated: Bool) { 
    super.viewWillAppear(animated) 
    reachability = Reachability() 
    NotificationCenter.default.addObserver(self, selector: #selector(self.reachabilityChanged(_:)), name: Notification.Name.reachabilityChanged, object: reachability) 

    do { 
     try reachability?.startNotifier() 
    } catch { 
     print("This is not working.") 
     return 
    } 

} 

func reachabilityChanged(_ note: NSNotification) { 

    let reachability = note.object as! Reachability 

    if reachability.connection != .none { 
     if reachability.connection == .wifi { 
      print("Reachable via WiFi") 
     } else { 
      print("Reachable via Cellular") 
     } 
    } else { 
     print("Not reachable") 
    } 
} 

(Burning tarafından sağlanır).

+1

Hey, bunu projem için kullanmayı denedim, ancak hızlı bir şekilde 3 .reachabilityForInternetConnection() öğesinde tanınmadı: nasıl düzeltileceğimi bana yardımcı olabilir misiniz? – Dakata

+1

Çözümünüz benim için de çalıştı ... teşekkürler! :) –