swift - 如何从系统函数的完成处理程序闭包内返回?

时间:2018-01-30 13:55:29

标签: swift completionhandler

我知道这不起作用,因为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

2 个答案:

答案 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()是异步的。在得到答案之前,它会立即返回。

想象一下,你正在做饭,你问你的女儿“你哥哥会回家吃饭吗?”你的女儿需要打电话给你的儿子并找出答案。一旦提出问题,你就无法得到问题的答案。您必须等待女儿找到电话,拨打电话,并向您报告。

异步功能就是这样。函数返回时,答案是未知的。这就是完成处理程序的用途。这是在确定答案后执行的代码块。