Как отправить задачи в фоновую очередь в Swift?

У меня есть локальное уведомление, которое устанавливается, когда пользователь нажимает кнопку. Я хочу отправить это в фоновый поток, а затем обновить интерфейс. Это безопасный способ сделать это?

    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 ответ

Решение

Вы должны переместить блок основного потока внутри обработчика завершения. В противном случае ваш код выглядит нормально.

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

}
Другие вопросы по тегам