如何在 Swift 中将任务发送到后台队列?

Posted

技术标签:

【中文标题】如何在 Swift 中将任务发送到后台队列?【英文标题】:How to send tasks to the background queue in Swift? 【发布时间】:2017-08-11 21:10:13 【问题描述】:

我有一个在用户点击按钮时设置的本地通知。我想将此发送到后台线程,然后更新 UI。这是一种安全的方法吗?

    DispatchQueue.global(qos: .background).async  // sends registration to background queue
        center.add(request, withCompletionHandler: (error) in
            if let error = error 
                print(error)
            
        )
        DispatchQueue.main.async 
            try! self.realm.write 
                self.realm.add(task)
                self.updateData()
            
        
    

【问题讨论】:

【参考方案1】:

您应该在完成处理程序中移动主线程块,并在写入 Realm DB 时使用 do/catch 块。否则,您的代码看起来不错。

重要提示:如果您不在单例中,请在 DispatchQueue 块中使用 [weak self]。 More details here.

DispatchQueue.global(qos: .utility).async  // sends registration to background queue
    center.add(request)  error in
        if let error = error 
            print(error)
         else 
            DispatchQueue.main.async 
                do 
                    try self.realm.write 
                        self.realm.add(task)
                        self.updateData()
                     catch 
                        print("Error while writing to the Realm DB:", error)
                    
                
            
        
    )


【讨论】:

以上是关于如何在 Swift 中将任务发送到后台队列?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 中将对象数组发送到服务器?

如何在 Swift 中将触摸事件发送到 nextResponder

如何在swift3中将每个tableViewcell数据发送到collectionview

如何仅在 C 中将 SIGINT 发送到后台进程

如何在 Swift 中将 JSON 转换为数据类型?

如何在 Alamofire,swift 3 中将字典作为参数发送