以上代码检查以确保电子邮件地址有效,此部分正常运行。我还可以从完成处理程序中正确检索值。
DispatchQueue.global(qos: .utility).async {
let json = Json()
//check is email address exists using completion handler
json.isEmailAddressValid(input:email!) { (result: Bool) in
print("Result", result)
DispatchQueue.main.async {
if (!(result)) {
print("Email not found")
message?.append("\nEmail Address does not exisit")
}
}
}
self.alert(message:message!)
我想在找不到电子邮件地址时使用结果变量,然后将未找到电子邮件地址的消息附加到连接的字符串上。我已尝试多次,但在使用DispatchQueue
时,错误消息永远不会显示在警报视图中。我使用的是错误的帖子吗?
答案 0 :(得分:0)
问题是您正在调用异步方法,但在继续执行代码之前不等待结果。
在从self.alert(message:message!)
执行闭包之前执行对json.isEmailAddressValid(input:email!) { (result: Bool) in
的调用。
要解决此问题,只需将警报移至DispatchQueue.main.async
代码块中,如下所示:
DispatchQueue.main.async {
if (!(result)) {
print("Email not found")
message?.append("\nEmail Address does not exisit")
}
self.alert(message:message!)
}
作为一个单独的问题,您可能不需要在DispatchQueue.global(qos: .utility).async {
块中包含所有这些内容。
答案 1 :(得分:0)
需要在DispatchQueue.main.async闭包内调用self.alert(message:message!)。
当您使用async方法调用DispatchQueue时,将运行异步调用之后的代码,然后调用异步闭包内的代码。 (这是对发生的事情的简化......)
例如:
print("A")
DispatchQueue.main.async {
print("C")
}
print("B")
此代码将打印:
A
B
C
在您的示例中发生同样的事情,首先显示警报,然后处理isEmailAddressValid的结果,然后处理DispatchQueue.main.async中的代码。
Google“Grand Central Dispatch”或“GCD”,了解有关使用DispatchQueues的更多信息