2016-02-29 5 views
3

У меня возникли проблемы с пониманием обработчиков завершения.Как я могу выполнить функцию до вызова других в IBAction?

У меня есть textFieldEditingDidChange IBAction, который вызывает сначала проверить() функции на входе текстового поля , а затем, если заявление на логическом значении возвращаемого применить. Проблема заключается в том, что инструкция if начинается до того, как verify() завершил.

Вот код:

@IBOutlet weak var myTextField: UITextField! 

@IBAction func myTextFieldEditingDidChange(sender: AnyObject) { 

     let yo = verify(myTextField.text!)    
     print("\(yo)") // it always prints "true" because verify hasn't finished 

} 


func verify(myText: String) -> Bool { 
    var result = true 
    // some code that fetches a string "orlando" on the server 
    if myText == "orlando" { 
     result = false 
    } 
    return result 
} 

Как я могу сделать заявление для печати, или любой код, произойдет после того, как верифицировать была приурочена выполнить ?? Благодаря

ответ

3

Что-то вроде этого:

func verify(myText: String, completion: (bool: Bool)->()) { 
    var result = true 
    // some code that fetches a string "orlando" on the server 
    if myText == "orlando" { 
     result = false 
    } 
    completion(bool: result) 
} 

И вы называете его в IBAction, как это, с закрытием завершающим:

verify(myTextField.text!) { (bool) in 
    if bool { 
     // condition in `verify()` is true 
    } else { 
     // condition in `verify()` is false 
    } 
} 

Примечание: где вы говорите «код, который извлекает строка «orlando» на сервере », будьте осторожны, чтобы не установить новый completionпосле асинхронный вызов, иначе вы все равно столкнетесь с той же проблемой ... Завершение может использоваться в том же объеме, что и результат вызова асинхронного вызова.

+0

Большое спасибо, он работает. Ваша заметка также была полезна, так как я сделал именно ту ошибку, которую вы ожидали. Сейчас работает отлично. – standousset

+0

Nice. Пожалуйста, я рад, что смог помочь. – Moritz

Смежные вопросы