Как изменить значение переменной в asyn c fun c? - PullRequest
0 голосов
/ 04 февраля 2020

Я пытаюсь установить значение массива для пары вещей, хранящихся в моем firebase firestore. Затем я пытаюсь установить массив для UIPicker. Пожалуйста, скажите мне, что не так с моей забавной c декларацией:

func getDropDownOptions(completion: @escaping (_ in1: String,_ in2: String,_ in3: String,_ in4: String,_ in5: String) -> Void)

или моим призывом к игре:

getDropDownOptions { (in1, in2, in3, in4, in5) in
            if in1 == "nil" {
                self.errorLabel.text = "Please add an intrest to your profile"
                return
            } else if in2 == "nil" {

                return self.sportPickerData = [in1, in2]
            } else if in3 == "nil" {

                return self.sportPickerData = [in1, in2, in3]
            } else if in4 == "nil" {
                return self.sportPickerData = [in1, in2, in3, in4]
            } else {
                return self.sportPickerData = [in1, in2, in3, in4, in5]
            }
        }

1 Ответ

1 голос
/ 04 февраля 2020

Если завершение вызывается в фоновом потоке, то вам необходимо отправить обратно в основной поток, чтобы изменить пользовательский интерфейс.

// if you are in a background thread, then ...
DispatchQueue.main.async {
    // Update UI here
}

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

Например:

// if you are in a background thread, then ...
DispatchQueue.main.async {
    // Update UI here
    self.errorLabel.text = "Please add an intrest to your profile"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...