Я довольно новичок в языке программирования Swift, создавая графические интерфейсы и использую асинхронные рассылки в целом, поэтому, пожалуйста, простите этот вопрос, который, я думаю, - имеет мучительно простой ответ.Асинхронный диспетчер ресурсов в Swift
Что я пытаюсь сделать, так это отключить и снова включить кнопку Next
в графическом интерфейсе в зависимости от того, были ли выбраны правильные настройки. Эти параметры находятся в двух флажках и текстовом поле.
Моя идея состояла в том, чтобы процесс в фоновом режиме постоянно проверял настройки и - если они действительны - включите кнопку Next
. Этот блок кода моя последняя попытка:
func checkValidSettings() {
let priority = DISPATCH_QUEUE_PRIORITY_DEFAULT
dispatch_async(dispatch_get_global_queue(priority, 0)) {
while true {
if self.textField.stringValue == "Test" {
dispatch_async(dispatch_get_main_queue()) {
self.nextButton.enabled = false
}
} else if (self.checkBox1.state == NSOffState && self.checkBox2.state == NSOffState){
dispatch_async(dispatch_get_main_queue()) {
self.nextButton.enabled = false
}
} else {
dispatch_async(dispatch_get_main_queue()) {
self.nextButton.enabled = true
}
}
}
}
}
Хотя это работает правильно, это приводит к тому, чтобы приложение было огромным ресурсом свиней (100% CPU и несколько гигабайт оперативной памяти), который я предполагаю, что из-за тонну фоновых задач. Я перепутал где-то довольно плохо, ха-ха.
Мой вопрос в том, как я должен структурировать цикл while
так, чтобы он постоянно проверял настройки, не выполняя при этом все мои ресурсы? Или есть более простой способ управления графическим интерфейсом?
Заранее благодарим за любые советы или помощь, которые вы можете дать!
Почему цикл? Просто проверьте условия, когда значение изменилось. вы можете зарегистрировать обратный вызов для него. также ваш код не является потокобезопасным. Вы не можете использовать элемент пользовательского интерфейса из не основного потока. –
Ты знаешь, это намного лучше, чем то, что я пытался сделать, ха-ха. Как проверить условия, когда значение изменилось? – humcat
https://developer.apple.com/library/mac/documentation/Cocoa/Reference/ApplicationKit/Classes/NSTextField_Class/#//apple_ref/occ/instm/NSTextField/textDidChange: –