iOS Transmission de données à l'aide de fermetures (retour de données)


Exemple

Au lieu d'utiliser le modèle de délégué , qui divise l'implémentation dans différentes parties de la classe UIViewController , vous pouvez même utiliser des closures pour renvoyer des données en avant et en arrière. En supposant que vous utilisez le UIStoryboardSegue , dans la méthode prepareForSegue , vous pouvez facilement configurer le nouveau contrôleur en une seule étape

final class DestinationViewController: UIViewController {
    var onCompletion: ((success: Bool) -> ())?

    @IBAction func someButtonTapped(sender: AnyObject?) {
        onCompletion?(success: true)
    }
}

final class MyViewController: UIViewController {
    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    
        guard let destinationController = segue.destinationViewController as? DestinationViewController else { return }
    
        destinationController.onCompletion = { success in
            // this will be executed when `someButtonTapped(_:)` will be called
            print(success)
        }
    }
}

Ceci est un exemple d'utilisation et il est préférable d'utiliser Swift, la syntaxe du bloc Objective-C n'est pas si facile de rendre le code plus lisible