我正在Swift中制作一个基于文档的iOS应用程序,该应用程序使用FileManager.default.setUbiquitous()将文件保存到该应用程序的iCloud Drive文件夹中。现在,我找不到确定setUbiquitous成功运行的方法(就像我在this帖子中提到的那样)。

我正在查看Apple的文档,它说Objective-C版本的setUbiquitous()返回了Bool,而

在Swift中,此方法返回Void并标记为throws
关键字,指示在失败的情况下会引发错误。

我想知道此函数何时成功运行,以便我可以运行其他代码来说明上载的文档-我发现执行此操作的最接近方法是在函数的说明中,该说明中说:

使用调度队列从后台线程调用此方法。后
该方法返回,通知您的主线程更新其余的
您应用的数据结构。

问题是,我不知道“通过消息化主线程来更新应用程序其余数据结构”意味着什么。任何帮助,将不胜感激!

编辑:在进一步研究之后,我认为我的主要问题是它说“方法返回后...”。如果该方法仅返回“无效”,我如何等待直到它返回以更新其余数据结构?

最佳答案

这是一般的想法:

DispatchQueue.global(qos: .background).async {
    // This will run on a background Thread

    let succeeded: Bool
    try {
        FileManager.default.setUbiquitous( ... )
        succeeded = true
    }
    catch {
        // handle error
        succeeded = false
    }

    DispatchQueue.main.async {
        // This will run back on the main thread
        reportResult(succeeded)
    }
}

10-02 02:03