2017-04-07 2 views
1

Alamofire을 통해 내 VM 서버에서 암호를 가져 오는 데 문제가 있습니다. 나는 서버에 요청을하고 있는데 소금을 돌려 주어야한다. 그래서 나는 암호를 해독하고, 해쉬 한 다음 서버로 다시 보낼 수있다.변수에 Alamofire 요청 데이터 저장

let salted_password = user_password + salt 
let hash = salted_password.sha1() 

user_password은 여기서

문제는 내가 Alamofire 변수로, 수신, 소금을 저장하는 방법을 이해하지 못하는, 그래서 그냥처럼 암호에 추가하고 해시 수 있다는 것입니다 사용자가 암호 필드에 입력 한 내용과 salt은 Alamofire 소금 요청에서 얻은 것입니다.

Binary operator '+' cannot be applied to operands of type 'String' and '()'. 

그래서 변수에 요청 값을 저장 할 수 있습니다 :

func getSalt(completionHandler: @escaping (DataResponse<String>, Error?) -> Void) { 

     Alamofire.request("http://192.168.0.201/salt", method: .post, parameters: salt_parameters).responseString { response in 

     switch response.result { 
     case .success(let value): 
      completionHandler(response as DataResponse<String>, nil) 
     case .failure(let error): 
      completionHandler("Failure", error) 
      } 
     } 
    } 

    let salt = getSalt { response, responseError in 

     return response.result.value! 
    } 

그것은 나에게 다음과 같은 오류를 제공합니다 : 여기

내 코드? 어떻게해야합니까?

감사합니다.

+3

'getSalt()'의 반환 값은 무엇입니까? 그것은 당신이 할 수없는 그 함수의 결과와'String'을 결합하려고 시도하는 것 같습니다 (당신이 어려운 방법을 발견했기 때문에) :) – pbodsk

+0

당신이해야 할 일은 대신이 같은 것입니다. 'var salt : String ?; getSalt {response, responseError in salt = response.result.value; }' –

+0

@ ZonilyJame 고마워요. 작동합니다! –

답변

0

여기에서 문제는 당신이 예를 들어 당신의 completion block

을 구현하는 방법이다 :

var answer: Int = 0 
someAsynchronousCall(100, b: 200) { result in // the `result` is like what you're returning to the user since API calls need to be called asynchronously you do it like this rather than creating a function that has a default return type. 
    answer = result 
    print(answer) 
} 
print(answer) 

인쇄 : 그것과 같을 것이다이 코드를 사용하려면

func someAsynchronousCall(a: Int, b: Int, @escaping block: (_ result: Int) -> Void) { 
    ... some code here 
    ... { 
     // let's just say some async call was done and this code is called after the call was done 
     block(a + b) 
    } 
} 

이 모양은

우리는 선언 이후 83,

0 같은 대답은 그것이 다음에 그래서 모든

300 인쇄 비동기 호출 (후 일반적으로 몇 밀리 초) 완료 후 비동기 호출이 아직 완료되지 않은 이후 처음 것을 인쇄 된 모든 코드는 이와 같이 보일 것입니다.

var salt: String? 
getSalt { response, responseError in 
    salt = response.result.value 
}