SWIFT - предотвращает одновременный вызов одной и той же функции - PullRequest
0 голосов
/ 08 октября 2018

У меня есть приложение, в котором основной пользовательский интерфейс ожидает некоторого вычисления перед обновлением.Все приложение зависит исключительно от подключения пользователя к Wi-Fi, так как мы делаем любые вызовы API для расчета данных.Иногда в условиях RARE функция, которая запускает все, запускается дважды ... в результате обновленный интерфейс отображает недопустимые данные.

Как можно предотвратить это.Извините, я не показываю код, потому что это будет легче объяснить концепцию.

Редактировать: чтобы воспроизвести эту ошибку, это то, что я делаю.Псевдокод ниже

override func viewDidLoad() {
    mainCall()
}


override func viewWillAppear(_ animated: Bool) {
    mainCall()
}


func executeOne(){
    callA(){}
    callB(){}
    etc...
}

1 Ответ

0 голосов
/ 08 октября 2018

Вы можете использовать переменную bool, чтобы указать, выполняется ли уже вызов API, и инициировать вызов API только в случае, если другой не выполняется.

class YourClass {
    var apiCallIsInProgress = false

    func apiCall(){
        if !apiCallIsInProgress {
            // doApiCall is the function actually implementing the API call and returning the result through a completion handler
            doApiCall(completion: {
                apiCallIsInProgress = false
            }
        } else {
            apiCallIsInProgress = true
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...