2015-06-16 2 views
0

Я просто хотел бы получить второе мнение о том, есть ли какая-либо непредвиденная проблема с вызовом функций IBAction рекурсивно. Я задаю этот вопрос из-за аварии, которая произошла однажды, и мне было трудно воспроизвести ее.@IBAction рекурсивный вызов

Пусть у нас есть этот призыв:

var allowedToSend = false 

@IBAction func emailButtonPressed(sender: UIButton) { 

    if !allowedToSend { 

    let controller = UIAlertController(title: title, 
        message: "Are you sure you want to send the Email?", 
        preferredStyle: .Alert) 

    controller.addAction(UIAlertAction(title: "Yes please, send.", style: .Default, handler: { 
        action in 

        self.allowedToSend = true; 
        self.emailButtonPressed(sender) // call self again 
      })) 

    controller.addAction(UIAlertAction(title: "Cancel", style: .Default, handler: nil)) 
    presentViewController(controller, animated: true, completion: nil) 
    return // exit the function 

    } 

    // Reset the value 
    allowedToSend = false 

    // Sending code 

    let text = textArea.text 
    let to = toLabel.text 

    ....  

} 

Это правильный способ вызвать @IBAction рекурсивно Swift?

+0

Это не просто делает UIAlertController снова и снова? –

+0

Что вы пытаетесь сделать? Вы удалили слишком много окружающего кода, чтобы можно было сказать, что вы делаете что-то неправильно. – dan

+2

'IBAction' - это тот же метод, что и любой другой. Нет никакой разницы, 'IBAction' - всего лишь подсказка для xcode. Ваша проблема, безусловно, где-то в другом месте. –

ответ

1

Да, это правильный способ вызова функции рекурсивно, как и с любой другой функцией.

Примечание:
Это нехорошая привычка создавать это множество UIControllers, независимо от их типа.
Кроме того, поскольку ваша рекурсия не предназначена для завершения, это приведет к бесконечному количеству вызовов и, вероятно, приведет к сбою программы из переполнения стека - я бы не рекомендовал этого.

+0

Извините за это. Я добавил еще код. –