Вы отправляете любую работу, которую вы выполняете в методе создания запроса асинхронно, поэтому ваша функция создания данных не будет ждать выполнения этой работы для продолжения ее выполнения, она просто вызывает ее и сохраняет ее выполнение, и поэтому ваше значениене изменяется при достижении вашего оператора «Это ответ за пределами DispatchQueue:».Он будет изменен в созданном вами блоке захвата, поэтому вам нужно создать блок завершения @escaping, как они упоминали ранее, чтобы возвращать ваше значение только после завершения работы, которую вы проделали для его получения.
func createData(request:Crudpb_CreateRequest, with completion: @escaping (String) -> Void) {
DispatchQueue.main.async {
self.response = try! self.client.create(request)
completion(self.response)
}
}