2016-02-16 20 views
10

Tôi muốn chức năng tương tự như AFNetworking trong Objective-C với Alamofire NetworkReachabilityManager trong Swift:Làm thế nào để sử dụng NetworkReachabilityManager trong 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; 
     } 
    } 
}]; 

Tôi hiện đang sử dụng nghe để biết những thay đổi trạng thái với mạng

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

Ai đó có thể mô tả cách hỗ trợ các trường hợp sử dụng đó không?

Trả lời

12

Tôi tìm thấy câu trả lời bản thân mình tức là chỉ bằng cách viết một người biết lắng nghe với đóng cửa như đã đề cập dưới đây:

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

Dưới đây là thực hiện của tôi. Tôi sử dụng nó trong một singleton. Hãy nhớ giữ tham chiếu trình quản lý khả năng hiển thị.

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 Lớp

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() 
    } 
} 

Bắt đầu Mạng reachability 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

đoạn mã đẹp – Abdoelrhman

4

Sử dụng một singleton đang làm việc như tôi miễn là bạn giữ một tài liệu tham khảo của reachabilityManager

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() 
} 

Vì vậy, bạn có thể sử dụng nó như bất cứ nơi nào trong ứng dụng của bạn:

let networkStatus = NetworkStatus.sharedInstance 

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

Bạn sẽ được thông báo về bất kỳ sự thay đổi trong tình trạng mạng của bạn. Chỉ để đóng băng trên bánh this là một hoạt ảnh rất tốt để hiển thị trên mất kết nối internet của bạn.

Các vấn đề liên quan