На мой взгляд, ваша кодировка выглядит правильно. Имейте в виду, что запрос асинхронный. При отладке URLSession.shared.dataTask вы поймете, что сначала отладчик пропускает dataTask. Когда URLSession получает ответ, он снова вводит URLSession.shared.dataTask. Я бы рекомендовал установить точку останова в соответствии с вашим защитным заявлением. Затем снова отладьте процесс и посмотрите, входит ли отладчик в процесс.
Было бы также интересно наблюдать ответ и ошибку в обработчике завершения, чтобы увидеть, есть ли ошибки.
URLSession.shared.dataTask(with: url) { (data, response, error) in
if let error = error {
print(error)
return
}
guard let httpResponse = response as? HTTPURLResponse,
httpResponse.statusCode == 200,
let data = data
else {
print("ResponseProblem")
print(response)
return
}