Como usar corretamente dispatch_sync, dispatch_async, dispatch_after e outras funções GCD em Swift 3, 4 e versões posteriores?
Olá a todos! Estou migrando de Objective-C para Swift e fiquei confuso com o Grand Central Dispatch (GCD) após o lançamento do Swift 3. Antes eu escrevia algo como:
```swift
dispatch_async(dispatch_get_main_queue(), {
// atualização da UI
})
```
Mas agora o Xcode diz que isso está errado. Entendo que a Apple mudou a API, mas não consigo encontrar uma explicação clara de como trabalhar com GCD no Swift 3, 4 e versões posteriores. Preciso entender:
1. Como executar código assincronamente na main queue (para atualizar a UI)?
2. Como executar código sincronamente (dispatch_sync) em uma background queue?
3. Como criar um delay antes da execução (dispatch_after)?
4. Como criar minha própria queue?
Tentei escrever assim, mas não funciona:
```swift
DispatchQueue.main.async {
// código
}
DispatchQueue.global().sync {
// código
}
```
Por favor, explique para um iniciante em Swift como usar GCD corretamente no Swift moderno. De preferência com exemplos que eu possa copiar e usar imediatamente.