Swift 将Alamofire请求数据保存到变量中
我在通过Alamofire从VM服务器获取密码时遇到问题。我正在向服务器发出请求,它应该会将salt返回给我,这样我就可以对我的密码进行salt操作,将其散列并发送回服务器 问题是我不知道如何将Alamofire接收到的salt保存到一个变量中,所以我可以将它添加到password中,然后像这样散列:Swift 将Alamofire请求数据保存到变量中,swift,request,alamofire,Swift,Request,Alamofire,我在通过Alamofire从VM服务器获取密码时遇到问题。我正在向服务器发出请求,它应该会将salt返回给我,这样我就可以对我的密码进行salt操作,将其散列并发送回服务器 问题是我不知道如何将Alamofire接收到的salt保存到一个变量中,所以我可以将它添加到password中,然后像这样散列: let salted_password = user_password + salt let hash = salted_password.sha1() 其中,user\u password是用
let salted_password = user_password + salt
let hash = salted_password.sha1()
其中,user\u password
是用户在密码字段中输入的内容,salt
是我从Alamofire salt请求中获得的内容
这是我的密码:
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!
}
那么,是否可以将请求值保存到变量中?我该怎么办
感谢您的关注。这里的问题是因为您如何实现了
完成块
例如:
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)
}
}
要使用此代码,它将如下所示:
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)
这张照片看起来像这样
0
300
var salt: String?
getSalt { response, responseError in
salt = response.result.value
}
由于我们将answer声明为0
它首先打印了它,因为异步调用还没有完成,所以在异步调用完成之后(通常是几毫秒之后),它接着打印300
所以你的代码应该是这样的
0
300
var salt: String?
getSalt { response, responseError in
salt = response.result.value
}
这里的问题是因为您如何实现完成块
例如:
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)
}
}
要使用此代码,它将如下所示:
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)
这张照片看起来像这样
0
300
var salt: String?
getSalt { response, responseError in
salt = response.result.value
}
由于我们将answer声明为0
它首先打印了它,因为异步调用还没有完成,所以在异步调用完成之后(通常是几毫秒之后),它接着打印300
所以你的代码应该是这样的
0
300
var salt: String?
getSalt { response, responseError in
salt = response.result.value
}
getSalt()
的返回值是多少?似乎您正试图将一个字符串
与该函数的结果结合起来,但您不能(正如您已经发现的困难:)您应该这样做<代码>变量盐:字符串?;getSalt{response,responseError in salt=response.result.value;}
@ZonilyJame非常感谢,它很有效@我会添加一个答案,你能接受吗:)如果有帮助,也请投票给评论。getSalt()
的返回值是多少?似乎您正试图将一个字符串
与该函数的结果结合起来,但您不能(正如您已经发现的困难:)您应该这样做<代码>变量盐:字符串?;getSalt{response,responseError in salt=response.result.value;}@ZonilyJame非常感谢,它很有效@我会补充一个答案,你能接受吗:)如果评论有帮助,也请投票。