Делай так:
DispatchQueue(label: "background").async {
RccContactController.shared.updateSyncStatus(lastCount : lastIndex)
ContactDataStore.shared.updateContacts(withAppUsers: contacts)
DispatchQueue.main.async {
if let safeDelegate = RccContactController.shared.delegate {
safeDelegate.syncedPhonebookContact(contacts: restContacts, appUsers: cont)
}
}
}
Общий пример:
DispatchQueue(label: "background").async {
do {
let realm = try Realm(configuration: config)
let obj = realm.resolve(wrappedObj)
try realm.write {
DispatchQueue.main.async {
//Callback or Update UI in Main thread
}
}
}
catch {
//Callback or Update UI in Main thread
}
}
Выполнять только операцию пользовательского интерфейса в DispatchQueue.main.async
в остальном держать в фоновом потоке.