我知道这不起作用,因为int x, y, z,n;
printf("Introduceti minimul de cifere,vocale,consoane pe care trebuie sa le contina un cuvant\nSub forma x\\y\\z\n");
if (3 != scanf("%d\\%d\\%d", &x, &y, &z)) {
// process error
...
}
printf("Introduceti numarul pe care il doriti de cuv asemanatoare\n");
if (1 != scanf(" %d", &n)) {
// process error
...
}
位于completion handler
但
我应该在哪里派遣主队列或我还有什么 要做什么?
这是代码:
background Thread
答案 0 :(得分:6)
你不能这样做; getNotificationSettings
是异步的,因此您应该在方法中传递闭包并在切换后立即调用。
像这样:
static func isNotificationNotDetermined(completion: (Bool) -> Void) {
UNUserNotificationCenter.current().getNotificationSettings { (notificationSettings) in
var isNotDetermined = false
switch notificationSettings.authorizationStatus {
case .notDetermined:
isNotDetermined = true
case .authorized:
isNotDetermined = false
case .denied:
isNotDetermined = false
}
// call the completion and pass the result as parameter
completion(isNotDetermined)
}
}
然后你会这样调用这个方法:
YourClass.isNotificationNotDetermined { isNotDetermined in
// do your stuff
}
答案 1 :(得分:3)
你做不到。这不是因为完成处理程序在后台线程上。
这是因为函数getNotificationSettings()
是异步的。在得到答案之前,它会立即返回。
想象一下,你正在做饭,你问你的女儿“你哥哥会回家吃饭吗?”你的女儿需要打电话给你的儿子并找出答案。一旦提出问题,你就无法得到问题的答案。您必须等待女儿找到电话,拨打电话,并向您报告。
异步功能就是这样。函数返回时,答案是未知的。这就是完成处理程序的用途。这是在确定答案后执行的代码块。