Мне было интересно, могу ли я ждать завершения замыкания в цепочке функций до того, как код перейдет к следующей функции.Подождите завершения замыкания в середине функциональной цепочки в SWIFT
Например:
SomeSingletonClass.sharedInstance.bFunction()
И если это первый вызов sharedInstance, я хотел бы bFunction(), чтобы ждать, пока закрывающей * в Init() из SingletonClass заканчивается. Возможно ли как-то без блокировки пользовательского интерфейса?
* Это закрытие может показывать предупреждение авторизации доступа к гранту, а функция bFunction() должна ждать реакции пользователя на это предупреждение (или вообще не может вызывать bFunction, в зависимости от ответа пользователя).
Спасибо за любые советы в продвинутом виде.
UPDATE
Так как это было предложено GoZoner, я пытался заблокировать выполнение в методе init()
с dispatch_semaphore_create()/signal()/wait()
, но в этом случае приложение блокируется и не может показать AlertView.
Итак, я должен просто блокировать основной поток? Это хорошая идея? У меня могут быть сетевые запросы (которые начались ранее), показывая всплывающее окно. Будет ли блокировка выполнения повлиять на этот запрос (я имею в виду, может ли это вызвать Тайм-аут запроса, например?). Или я должен выполнить всю строку кода в другом потоке? – danieltmbr
Если вы должны называть 'bFunction()' прикованным, как вы показали, вам нужно заблокировать все вызовы, которые вызывается при вызове 'init()'. Другой вариант - использовать обратные вызовы в вашем «Предупреждении» (или других действиях пользовательского интерфейса). – GoZoner