Сделайте несколько асинхронных запросов, но дождитесь только одногоIOS

Программируем под IOS
Ответить
Anonymous
 Сделайте несколько асинхронных запросов, но дождитесь только одного

Сообщение Anonymous »

У меня вопрос по поводу асинхронных запросов. Я хочу запросить данные из разных источников в Интернете. В каждом источнике могут быть нужные мне данные, но я не знаю этого заранее. Поскольку мне нужна эта информация только один раз, меня не волнуют другие источники, как только один источник предоставил мне нужные мне данные. Как бы я это сделал?
Я думал сделать это с помощью DidSet и установить его только один раз, примерно так:

Код: Выделить всё

var dogPicture : DogPicture? = nil {
didSet {
// Do something with the picture
}
}

func findPictureOfDog(_ sources) -> DogPicture? {
for source in sources {
let task = URL.Session.shared.dataTask(with: source) { (data, response, error) in
// error handling ...
if data.isWhatIWanted() && dogPicture == nil {
dogPicture = data.getPicture()
}
}
task.resume()
}
}

sources = ["yahoo.com", "google.com", "pinterest.com"]

findPictureOfDog(sources)
Однако было бы очень полезно, если бы я мог просто подождать, пока findPictureOfDog() завершится, потому что в зависимости от того, найду я что-то или нет, у меня есть запросить у пользователя дополнительную информацию.

Я не знаю, как я мог бы сделать это указанным выше способом, потому что, если я ничего не найду, DidSet никогда не будет позвонят, но тогда я должен попросить у пользователя фотографию.

Плюс: isWhatIWanted() довольно дорог, поэтому было бы здорово, если бы был способ прервать выполнение обработчика после того, как я нашел DogPicture. .

Надеюсь, я ясно выразился и надеюсь, что кто-нибудь сможет мне помочь с этим!

С уважением и уважением спасибо, что уделили время

Подробнее здесь: https://stackoverflow.com/questions/601 ... r-only-one
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»