ios - Swift 编写一个带返回值的 async/await 方法
问题描述
我想编写一个带返回值的异步等待方法,但我的代码不起作用。我还尝试了另一种方式,例如DispatchQueue.global
DispatchGroup()
等等。
这是我的代码:
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
}
解决方案
谢谢,瓦迪安评论。我使用闭包作为方法的输入参数。
// 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!")
}
}
推荐阅读
- oracle - 带有 if 语句的流水线函数
- angular - Keycloak、Federation 和自定义角色
- c# - 如何在 C# 中即时创建按钮
- java - Java - 两个字符,如何识别哪个是'?
- python - 为什么python for循环在while循环中导致无限循环?
- google-cloud-platform - 应用类型是否影响单位每分钟成本?
- android - 当用户在对话中滚动时日期向上和向下滑动动画android kotlin
- java - 如何在我的 Android 应用程序中加入 Firestore
- git - 我可以让 SSH ForwardAgent 和 ProxyJump 与 Git 一起工作吗?
- angular - 如何用角度格式化清晰度设计日期选择器的输出