Swift编写带有返回值的async/await方法 [英] Swift write an async/await method with return value
本文介绍了Swift编写带有返回值的async/await方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想编写一个带有返回值的async-await方法,但是我的代码不起作用.我还尝试了另一种方式,例如 DispatchQueue.global
DispatchGroup()
等.
这是我的代码:
I want to write an async-await method with a return value, but my code doesn't work. I also tried another way such as DispatchQueue.global
DispatchGroup()
and so on.
Here is my code:
func checkPassCode() -> Bool {
var result = false
let closure = { (_ flag:Bool) -> Void in
result = flag
}
if var pin = self.keychain.get("pin") {
let userPin = self.pin.joined(separator: "")
let encryptedData = NSData(base64Encoded: pin, options: [])
AsymmetricCryptoManager.sharedInstance.decryptMessageWithPrivateKey(encryptedData! as Data) { (success, result, error) -> Void in
if success {
pin = result!
print("userPin is: \(userPin)")
print("storePin is: \(pin)")
closure(userPin == pin)
} else {
print("Error decoding base64 string: \(String(describing: error))")
closure(false)
}
}
}
return result
}
推荐答案
感谢 vadian 评论.我使用闭包作为方法的输入参数.
Thanks, vadian comment. I used a closure as an input parameter of the method.
// MARK: - PassCode Methods
func checkPassCode(completionHandler:@escaping (_ flag:Bool) -> ()) {
let storePin = getStorePin()
let userPin = self.pin.joined(separator: "")
AsymmetricCryptoManager.sharedInstance.decryptMessageWithPrivateKey(storePin as Data) { (success, result, error) -> Void in
if success {
let pin = result!
print("userPin is: \(userPin)")
print("storePin is: \(pin)")
completionHandler(userPin == pin)
} else {
print("Error decoding base64 string: \(String(describing: error))")
completionHandler(false)
}
}
}
func getStorePin() -> NSData {
if let pin = self.keychain.get("pin") {
return NSData(base64Encoded: pin, options: []) ?? NSData()
}
return NSData()
}
,然后调用此方法:
checkPassCode { success in
if success {
print("sucess")
} else {
print("not sucess!")
}
}
这篇关于Swift编写带有返回值的async/await方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文