2017-09-09 3 views
1

서버 측에서 오류가 발생하면 완료 블록에서 오류를 처리 할 수 ​​있습니다. 여기에는 로그인 용 객체 매퍼 클래스가 있습니다.신속한 오류 처리 objectMapper 및 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"] 
} 
} 

여기 뷰 컨트롤러에서 호출하는 API입니다.

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 
} 

이 내가 서비스를 발사 곳에서 네트워크 클래스 mthod입니다

// 사용자 로그인 웹 서비스

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

그래서 난 내보기 컨트롤러 완료 블록에서 오류를 처리 할 수있는 방법?

+0

당신이 –

+0

현재 오류가 서버 측에서 처리되지 않는 웹 응답을 게시 할 수 있습니다 사용

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

오류 경우 호출. 하지만 오류가 서버 쪽에서 오는 경우 어떻게 처리 할 수 ​​있는지 알고 싶습니다. 내가 succes에 완료 블록을 사용하는 방법으로 내가 어떻게 오류에 대한 완료 블록을 사용할 수 있습니까? – user3655325

답변

1

당신은 오류에 대한 또 다른 처리기를 만들 수

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가 갑자기이 오류 메시지를 표시하기 시작합니다. "이 함수에 'Error'가 아닌 함수 유형의 값을 호출 할 수 없습니다. error (error, response.response? .statusCode) // 오류 처리기를 호출하십시오. – user3655325

+0

응답 이름이 errorHandler로 업데이트되었습니다. 이제는 효과가 있습니다. – Andrew

+0

감사합니다 앤드류 .. :) – user3655325

관련 문제