2016-12-26 1 views
9

Я использую ниже код для выполнения запроса HTTP в server.Now я хочу знать, подключен ли он к Интернету или not.Below мой кодКак проверить подключение к Интернету в alamofire?

let request = Alamofire.request(completeURL(domainName: path), method: method, parameters: parameters, encoding: encoding.value, headers: headers) 
     .responseJSON { 


     let resstr = NSString(data: $0.data!, encoding: String.Encoding.utf8.rawValue) 
     print("error is \(resstr)") 


     if $0.result.isFailure { 
      self.failure("Network") 
      print("API FAILED 4") 
      return 
     } 
     guard let result = $0.result.value else { 
      self.unKnownError() 
      self.failure("") 
      print("API FAILED 3") 

      return 
     } 
     self.handleSuccess(JSON(result)) 
    } 
+0

вы можете использовать [достижимость сети] (https://github.com/ Alamofire/Alamofire # network-достижимость) –

+0

Возможно, вы захотите проверить [этот ответ] (http://stackoverflow.com/a/32187515/5501940) –

+0

Возможный дубликат [Проверить доступность интернет-соединения?] (Http: // stackoverflow .com/questions/32185705/check-internet-connection-availability) – TajyMany

ответ

1
func isConnectedToNetwork()-> Bool { 

    var zeroAddress = sockaddr_in() 
    zeroAddress.sin_len = UInt8(MemoryLayout.size(ofValue: zeroAddress)) 
    zeroAddress.sin_family = sa_family_t(AF_INET) 
    let defaultRouteReachability = withUnsafePointer(to: &zeroAddress) { 
     $0.withMemoryRebound(to: sockaddr.self, capacity: 1) {zeroSockAddress in 
      SCNetworkReachabilityCreateWithAddress(nil, zeroSockAddress) 
     } 
    } 
    //Commented code only work upto iOS Swift 2.3 
    // let defaultRouteReachability = withUnsafePointer(to: &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) 
} 
    // Call api method 
    func callApi(){ 
     if isConnectedToNetwork() { // Network Connection status 
      // Call your request here 
     }else{ 
      //"Your Internet connection is not active at this time." 
     } 
    } 
+0

Я хочу это сделать alamofire not reachibilty – Techiee

+0

let достижимостьManager = Alamofire.NetworkReachabilityManager (хост: "www.apple.com")? функ listenForReachability() { reachabilityManager .listener = {статус в печати ("Состояние сети Изменено: \ (статус)") статус переключатель { случай .NotReachable: преодолей // Показать ошибки состояние случай .Reachable (_), .Unknown: сломать // Скрыть ошибки состояния }} reachabilityManager .startListening() } – Rivendell

+0

я не могу следовать этому подходу, пожалуйста, просмотрите мой код и предоставите решение – Techiee

1

Если вы Гото NetworkReachabilityManager.swift вы увидите это

/// Доступна ли сеть в настоящее время. public var isReachable: Bool {return isReachableOnWWAN || isReachableOnEthernetOrWiFi}

Так я написал это в моем APIhandlerClass

import AlamofireNetworkActivityIndicator 

private let manager = NetworkReachabilityManager(host: "www.apple.com") 

func isNetworkReachable() -> Bool { 
    return manager?.isReachable ?? false 
} 

Так что это говорит мне статус сети.

+0

, пожалуйста, дайте soluton только в alamofire – Techiee

+0

Это часть alamofire –

12

Свифта 2,3

Alamofire.request(.POST, url).responseJSON { response in 
switch response.result { 
    case .Success(let json): 
     // internet works. 
    case .Failure(let error): 

     if let err = error as? NSURLError where err == .NotConnectedToInternet { 
      // no internet connection 
     } else { 
      // other failures 
     } 
    } 
} 

Swift 3,0

Alamofire.upload(multipartFormData: { multipartFormData in 
    }, to: URL, method: .post,headers: nil, 
     encodingCompletion: { (result) in 
     switch result { 

     case .success(_, _, _): break 

     case .failure(let encodingError): 
      print(encodingError) 

      if let err = encodingError as? URLError, err.code == .notConnectedToInternet { 
       // no internet connection 
       print(err) 
      } else { 
       // other failures 
      } 

     } 
    }) 

Использование NetworkReachabilityManager

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

func checkForReachability() { 
    self.networkReachabilityManager?.listener = { status in 
     print("Network Status: \(status)") 
     switch status { 
     case .notReachable: 
      //Show error here (no internet connection) 
     case .reachable(_), .unknown: 
      //Hide error here 
     } 
    } 

    self.networkReachabilityManager?.startListening() 
} 
37

Для быстрой 3.1 и 4.4 Alamofire, я создал быстрый класс под названием Connectivity. Используйте NetworkReachabilityManager класс от Alamofire и configure метод isConnectedToInternet() согласно вашим потребностям.

import Foundation 
import Alamofire 

class Connectivity { 
    class func isConnectedToInternet() ->Bool { 
     return NetworkReachabilityManager()!.isReachable 
    } 
} 

Использование:

if Connectivity.isConnectedToInternet() { 
     print("Yes! internet is available.") 
     // do some tasks.. 
} 

EDIT: С быстрым обнадеживает вычисляемых свойств, вы можете изменить выше функции, как:

import Foundation 
import Alamofire 
class Connectivity { 
    class var isConnectedToInternet:Bool { 
     return NetworkReachabilityManager()!.isReachable 
    } 
} 

и использовать его как:

if Connectivity.isConnectedToInternet { 
     print("Yes! internet is available.") 
     // do some tasks.. 
} 
+0

Простой, рабочий и многоразовый. Не знаю, хотя если лучше сделать протокол с расширением и переопределить в необходимых местах. – Andreas777

5

Для Swift 3/4

В Alamofire, есть класс, называемый NetworkReachabilityManager, который может быть использован для наблюдателя или проверить, если интернет доступен или нет.

let reachabilityManager = NetworkReachabilityManager() 

reachabilityManager?.startListening() 
reachabilityManager?.listener = { _ in 
     if let isNetworkReachable = self.reachabilityManager?.isReachable, 
      isNetworkReachable == true { 
      //Internet Available 
     } else { 
      //Internet Not Available" 
     } 
    } 

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

0

Если Alamofire.upload результата успех возвращает то ниже есть способ проверить интернет Availibility при загрузке изображения:

Alamofire.upload(multipartFormData: { multipartFormData in 

       for (key,value) in parameters { 
       multipartFormData.append((value).data(using: .utf8)!, withName: key) 
       } 
        multipartFormData.append(self.imageData!, withName: "image" ,fileName: "image.jpg" , mimeType: "image/jpeg") 
      }, to:url) 
      { (result) in 

       switch result{ 

       case .success(let upload, _, _): 

        upload.uploadProgress(closure: { (progress) in 
        print("Upload Progress: \(progress.fractionCompleted)") 

        }) 

        upload.responseJSON { response in 
         if let statusCode = response.response?.statusCode{ 

         if(statusCode == 201){ 
         //internet available 
          } 
         }else{ 
         //internet not available 

         } 
        } 

       case .failure(let encodingError): 
        print(encodingError) 

       } 

      } 

 Смежные вопросы

  • Нет связанных вопросов^_^