Différence entre le bloc (objectif C) et la fermeture (Swift) dans ios
Dans les tutoriels, il est écrit que fonctionnellement les deux sont identiques, même la fermeture est plus facile que le bloc et évite la complexité de la gestion des blocs et de la mémoire, j'ai parcouru de nombreux tutoriels mais sauf ceux-ci, je ne fais pas la différence entre la "fermeture" de swift et le "bloc"Objective-C.
Quelqu'un peut-il expliquer cette différence en profondeur. Toute aide serait appréciée.
3 réponses
Extrait De: Apple Inc. "Utiliser Swift avec Cocoa et Objective-C." iBooks:
" les fermetures Swift et les blocs Objective-C sont compatibles, vous pouvez donc passer des fermetures Swift aux méthodes Objective-C qui attendent des blocs. Les fermetures et les fonctions Swift ont le même type, de sorte que vous pouvez même passer le nom d'une fonction Swift.
Les fermetures ont une sémantique de capture similaire en tant que blocs mais diffèrent d'une manière clé: Les Variables sont mutables plutôt que copiées. En d'autres termes, le comportement de __block dans Objective-C est le comportement par défaut pour les variables dans Swift."
Légères différences. Un a été mentionné; les variables sont capturées en tant que variables, pas en tant que valeurs. Ce qui peut être utile ou un piège. Fait important, vous pouvez définir une liste de capture dans une fermeture rapide, donc si vous incluez self.propriété dans la liste de capture, alors la valeur de cette propriété est capturée, et non self. Cela simplifie également la capture de variables faibles.
Pour afficher un exemple de code réel des différences:
Cela compile:
let x : @convention(swift) (inout Int) -> ()
Ce n'est pas le cas:
let y : @convention(block) (inout Int) -> ()
Avec l'erreur (inout Int) -> () is not representable in Objective-C