2017-09-09 4 views
1

Comment je peux gérer les erreurs dans le bloc d'achèvement si j'obtiens une erreur du côté serveur. Voici la classe de mappeur d'objet pour la connexion.Traitement des erreurs dans swift 3 en utilisant objectMapper et alamofire

class Login: Mappable { 
var result: LoginData? 
var success: Bool? 
var error: String? 

required init?(map: Map){ 

} 

func mapping(map: Map) { 

    result <- map["data"] 
    success <- map["success"] 
    error <- map["error"] 

} 
} 

class LoginData: Mappable { 
var name: String? 
var title: String? 
var token: String? 
var imageUrl: String? 

required init?(map: Map){ 

} 

func mapping(map: Map) { 

    name <- map["name"] 
    title <- map["title"] 
    token <- map["token"] 
    name <- map["name"] 
    imageUrl <- map["imageUrl"] 
} 
} 

Voici mon appel api de contrôleur de vue.

func loginMethod(){ 
    let postData = ["username":loginDict.object(forKey: KUserUserId) as! String, 
        "password": loginDict.object(forKey: KUserPass) as! String] 

    userLoginHttp(parameters: postData){ completion in 
     self.getUserLoginResponse(result: completion) 
    } 
} 

func getUserLoginResponse(result: LoginData) { 
// Here i do further 
} 

C'est la classe mthod de réseau où je tire le service

// Service web Connexion utilisateur

func userLoginHttp(parameters:Parameters, completion:@escaping (_ 
result:LoginData)->()) { 
let defaultObject = UserDefaults.standard 
var headerToken = String() 
if let x = defaultObject.object(forKey: KDeviceToken) 
{ 
    headerToken = x as! String 
} 
else{ 
    headerToken = "" 
} 

let headers = ["fcmToken": headerToken] 

Alamofire.request(KLoginUrl, method: .post, parameters: parameters,encoding: JSONEncoding.default, headers: headers) 
    .validate() 
    .responseObject{ (response: DataResponse<Login>) in 
     switch response.result{ 
     case .success: 
      let value = response.result.value 
      completion((value?.result)!) 
     case .failure(let error): 
      print(error.localizedDescription) 
     } 
} 
} 

Alors, comment je peux gérer l'erreur à mon avis bloc d'achèvement du contrôleur?

+0

peut vous envoyer votre réponse Web –

+0

actuellement erreur n'est pas traitée du côté serveur. Mais je veux savoir comment je peux gérer si l'erreur vient du côté serveur. Moyens que j'utilise le blocage d'achèvement sur le succès puis comment je peux utiliser le bloc d'achèvement pour l'erreur? – user3655325

Répondre

1

vous pouvez simplement créer un autre gestionnaire pour les erreurs et l'appeler dans l'erreur cas

func userLoginHttp(parameters:Parameters, 
         completion:@escaping (_ result:LoginData)->(), 
         errorHandler:@escaping (_ result:Error,_ statusCode:Int?)->()//error handler 
     ) { 
     let defaultObject = UserDefaults.standard 
     var headerToken = String() 
     if let x = defaultObject.object(forKey: KDeviceToken) 
     { 
      headerToken = x as! String 
     } 
     else{ 
      headerToken = "" 
     } 

     let headers = ["fcmToken": headerToken] 

     Alamofire.request(KLoginUrl, method: .post, parameters: parameters,encoding: JSONEncoding.default, headers: headers) 
      .validate() 
      .responseObject{ (response: DataResponse<Login>) in 
       switch response.result{ 
       case .success: 
        let value = response.result.value 
        completion((value?.result)!) 
       case .failure(let error): 
        errorHandler(error,response.response?.statusCode)//call error handler 
        print(response.response?.statusCode) 
        print(error.localizedDescription) 
       } 
     } 
    } 

utilisation

func loginMethod(){ 
    let postData = ["username":loginDict.object(forKey: KUserUserId) as! String, 
        "password": loginDict.object(forKey: KUserPass) as! String] 

    userLoginHttp(
     parameters: postData, 
     completion:{ completion in 
      self.getUserLoginResponse(result: completion) 
    }, 
     errorHandler:{ error,code in 
      //do your error stuff 
    }) 
} 

func getUserLoginResponse(result: LoginData) { 
    // Here i do further 
} 
+0

Andrew soudainement il commence à me montrer cette erreur "Impossible d'appeler la valeur du type de non-fonction" Erreur "" sur cette ligne. erreur (erreur, response.response? .statusCode) // appel gestionnaire d'erreur – user3655325

+0

J'ai mis à jour la réponse (erreur renommée à errorHandler). Maintenant ça devrait marcher. – Andrew

+0

Merci Andrew .. :) – user3655325