Форум программистов, компьютерный форум, киберфорум
Наши страницы

Swift

Войти
Регистрация
Восстановить пароль
 
 
Spelcrawler
527 / 497 / 111
Регистрация: 12.03.2014
Сообщений: 1,654
Завершенные тесты: 1
#1

Http request - Swift

26.11.2015, 13:08. Просмотров 979. Ответов 25
Метки нет (Все метки)

Здравствуйте. Как получить ответ от сервера по url, без всяких асинхронных конструкций? Да, я знаю что нужно все подобные операции делать асинхронно, но мне нужно послать 10 запросов по очереди и если для каждого писать код в блоках получается очень длинная и не читаемая простыня. Поискал информацию - везде говорят, что можно только асинхронно, но как тогда поступают в ситуациях похожих на мою?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.11.2015, 13:08
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Http request (Swift):

Post autologin request - Программирование iOS
Всем привет Пишу приложение, которое будет подкючаться к внешнему Веб сайту https// etc Задача такая. Я еще точно не понимаю Как...

HTTP авторизация - Программирование iOS
Такая зада, есть web-сервис на sharePoint от Microsoft. Я обращаюсь к нему через http и получаю в ответ xml. Но это в теории, на практике...

Чужие HTTP-запросы в HTTPS - Программирование iOS
Привет всем! Возникла интересная задача: Со стороны заказчика пришел JavaScript-овый кусок кода - мол, выполняйте его после...

Отправка HTTP (не HTTPS) запроса в Swift 2.0 с использованием NSURLSession - Swift
Доброго времени суток. Возникла проблема с отправкой POST запроса по http. Проблема в том, что несмотря на request.HTTPMethod =...

Ошибки Synapse (HTTP/1.1 400 Bad Request / HTTP/1.1 413 Request Entity Too Large) - Delphi
Добрый день. При работе с Synapse начали возникать вот такие вот две ошибки (HTTP/1.1 400 Bad Request / HTTP/1.1 413 Request Entity Too...

VK API Warning: file_get_contents(...) failed to open stream: HTTP request failed! HTTP/1.1 401 Unauthorized - PHP
<?class VK_Auth{ //ID приложения private $vk_app_id; //Защищенный ключ private $vk_app_secret_key; //Адрес сайта ...

25
AncientPenguin
98 / 45 / 18
Регистрация: 09.08.2015
Сообщений: 367
26.11.2015, 17:59 #2
Цитата Сообщение от Spelcrawler Посмотреть сообщение
но как тогда поступают в ситуациях похожих на мою?
Да хоть:
послатьЗапрос1()
послатьЗапрос2()
...
послатьЗапрос10()

Не очень понимаю в чем проблема.
0
Spelcrawler
527 / 497 / 111
Регистрация: 12.03.2014
Сообщений: 1,654
Завершенные тесты: 1
26.11.2015, 18:03  [ТС] #3
AncientPenguin, в том что для того, чтобы послать второй запрос мне нужен результат выполнения первого. А все ответы приходят в делегат. И чтобы мне послать по очереди 10 запросов нужно писать уже так:
запрос1(результат{
запрос2(результат{
запрос3...
})
})
И в каждом случае есть несколько вариантов дальнейшего поведения. Т.е. куча проверок на все что можно сбор разных параметров с разных запросов и использование этих параметров в дальнейших запросах. Как это все красиво написать с асинхронными запросами просто не представляю.
0
AncientPenguin
98 / 45 / 18
Регистрация: 09.08.2015
Сообщений: 367
26.11.2015, 19:21 #4
Цитата Сообщение от Spelcrawler Посмотреть сообщение
Как это все красиво написать с асинхронными запросами просто не представляю.
запрос1(...)
{
...
запрос2(результат1)
}


запрос2(...)
{
...
запрос3(результат2)
}

Как вариант.
0
Spelcrawler
527 / 497 / 111
Регистрация: 12.03.2014
Сообщений: 1,654
Завершенные тесты: 1
26.11.2015, 23:07  [ТС] #5
AncientPenguin, ну тут я буду по 2-3 раза каждый запрос выполнять, а когда мне нужны еще и ответы от первых 5 запросов, для совершения восьмого - вообще мрак.
0
AncientPenguin
98 / 45 / 18
Регистрация: 09.08.2015
Сообщений: 367
26.11.2015, 23:52 #6
Цитата Сообщение от Spelcrawler Посмотреть сообщение
ну тут я буду по 2-3 раза каждый запрос выполнять


Я в смысле запросы обернуть в функции или вообще в переменные засунуть.
0
Spelcrawler
527 / 497 / 111
Регистрация: 12.03.2014
Сообщений: 1,654
Завершенные тесты: 1
27.11.2015, 13:58  [ТС] #7
Цитата Сообщение от AncientPenguin Посмотреть сообщение
или вообще в переменные засунуть.
Это как?
0
glvrzzz
95 / 71 / 12
Регистрация: 12.12.2012
Сообщений: 214
27.11.2015, 14:36 #8
Заверните ваши запросы в NSOperation'ы
0
Spelcrawler
527 / 497 / 111
Регистрация: 12.03.2014
Сообщений: 1,654
Завершенные тесты: 1
27.11.2015, 14:46  [ТС] #9
Цитата Сообщение от glvrzzz Посмотреть сообщение
Заверните ваши запросы в NSOperation'ы
Можно по подробнее? Насколько я понял это что-то на подобии AsyncTask из андроид. Если так - с этим проблем нет, распраллелить я смогу как нужно. Вопрос лишь в том как мне последовательно в одном потоке выполнить несколько http запросов.
0
AncientPenguin
98 / 45 / 18
Регистрация: 09.08.2015
Сообщений: 367
27.11.2015, 16:41 #10
Цитата Сообщение от Spelcrawler Посмотреть сообщение
Это как?
let delegate = {
(arg : type) -> returnType
in
...
}
или
var test: (Int, Int) -> Int = testFunc
0
Spelcrawler
527 / 497 / 111
Регистрация: 12.03.2014
Сообщений: 1,654
Завершенные тесты: 1
27.11.2015, 16:54  [ТС] #11
AncientPenguin, ну тут разница не большая получается. Все равно будет непонятная простыня фиг пойми чего. В андроиде у меня реализовано примерно так: есть класс, в котором есть все методы из серверного api, все они возвращают ответ в обертке (собственно сам ответ, код ошибки, если есть, и пару методов для проверок). Далее я запускаю отдельный поток, в нем по очереди вызываю методы из api, проверяю каждый на ошибки, беру нужные мне данные и т.п.. Итоговый результат пишу в бд из того же потока и сообщаю всем подписавшимся что все выполнено (уже в главный поток), и там уже кому что нужно берут прямо из бд. Но в случае с асинхронными запросами такое сделать не получится.
0
AncientPenguin
98 / 45 / 18
Регистрация: 09.08.2015
Сообщений: 367
27.11.2015, 17:27 #12
Spelcrawler, я не знаю как вам еще объяснить, скинете код покажу на примере.

О, придумал, вам надо сделать:

Цитата Сообщение от Spelcrawler Посмотреть сообщение
и сообщаю всем подписавшимся что все выполнено
Первый запрос должен сообщить второму, второй третьему и т.д., каждый запрос знает только про один следующий запрос.
0
Spelcrawler
527 / 497 / 111
Регистрация: 12.03.2014
Сообщений: 1,654
Завершенные тесты: 1
27.11.2015, 17:34  [ТС] #13
Цитата Сообщение от AncientPenguin Посмотреть сообщение
Первый запрос должен сообщить второму, второй третьему и т.д., каждый запрос знает только про один следующий запрос.
Ну это совсем издевательство. Пока написал deprecated код на obj-c - с ним выходят нормальные синхронные запросы. Видимо apple опять за всех решили, как нужно писать код и на swift'e такого не добиться.
0
AncientPenguin
98 / 45 / 18
Регистрация: 09.08.2015
Сообщений: 367
27.11.2015, 18:11 #14
Цитата Сообщение от Spelcrawler Посмотреть сообщение
Ну это совсем издевательство.
Что это? Я вас пытался натолкнуть на мысль как по другому написать код, а не изменить функционал, но ваша фантазия работать не хочет, а виноват оказался эпл.
0
Spelcrawler
527 / 497 / 111
Регистрация: 12.03.2014
Сообщений: 1,654
Завершенные тесты: 1
27.11.2015, 19:02  [ТС] #15
AncientPenguin, не я все понимаю, но конструкция вида
результат1 = запрос1();
результат2 = запрос2(результат1);
намного легче читается чем то что вы предлагаете. Человеку первый раз увидевшему такой код вообще не понятно будет кто и что слушает и где это все описано. Ну и если уж зашла речь про фантазию, то тут как раз ограничение ее - "нам нравится делать так, и вы все делайте так же". Не очень хорошая политика при разработке языка.
0
27.11.2015, 19:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.11.2015, 19:02
Привет! Вот еще темы с ответами:

Выполнение http.request http.get - Node.js
О задаче: Начну с того что мне нужно сделать, мне нужно получить из формы url-адресс и выполнить http.request на этот адресс, после чего...

File_get_contents failed to open stream: HTTP request failed! HTTP/1.1 505 - PHP
Ребята подскажите пожалуйста. Использую фреймворк Yii. Пишу небольшой парсер. Все вроде бы работало. Тут неожиданно в один прекрасный день,...

Http Request - PHP
Всем хай разбераюсь с одним google api, и к нему нету библиотеки пока никакой... В документации написанно надо посылать такого вида...

http request response - C++ Qt
имею код... void MainWindow::replyFinished(QNetworkReply *r){ QString str = r->readAll(); } void...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru