【发布时间】:2019-09-14 12:28:02
【问题描述】:
我想编写一个带返回值的异步等待方法,但我的代码不起作用。我还尝试了另一种方式,例如DispatchQueue.globalDispatchGroup()等等。
这是我的代码:
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
}
【问题讨论】:
-
真的,不要这样做。将闭包传递给您的函数,以便在异步任务完成后调用。
-
@Paulw11 有没有通过闭包解决的另一种方法?我也想写简单。
-
您尚未准确描述“不起作用”的内容,但您似乎正在死锁主队列。接受异步任务是 iOS 开发的基本部分。闭包在 iOS 编程中非常简单且易于理解
-
@Paulw11是的,你说得对,我正在使主队列陷入僵局。我认为如果传递一个闭包,那么我必须为每个方法调用声明一个闭包,对吗?
-
@Paulw11我用闭包定义改变了我的代码
标签: ios swift asynchronous async-await dispatch