Tableau des fonctions dans l'Swift
Comment puis-je stocker un tableau de fonctions de rappel plus tard dans un tableau en JavaScript? Tout et AnyObject type de ne peut pas avoir des fonctions avec différents types de signatures de méthode.
- Sans exception, de la manipulation, je ne peux pas penser à tout utiliser pour cela. Pourriez-vous ajouter un peu plus le contexte de la question pour nous?
- Jetez un oeil à des fermetures, ils sont assez bien l'idéal pour ce genre de choses.
Array<Void -> Void>
ou illisible version(()->())[]
- Mon cas d'utilisation est de garder un tableau de fonction que je garde le résultat le passage d'une fonction à l'autre. Certains d'entre eux peuvent prendre deux paramètres, certains peuvent prendre un seul.
- Comme de Swift 1.1,
Any
peut avoir des fonctions. - Je suis venu avec l'idée de créer un tableau de boutons avec une boucle, par programmation. Car je veux que chaque bouton d'agir légèrement différente quand on la touche (donc pas de structure), je pense qu'un éventail de fonctions afin de réagir à chaque bouton par numéro de référence serait une raison d'utiliser un tableau de fonctions. Les pensées...
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser un enum pour mettre des fonctions diverses dans le Tableau et ensuite extraire les fonctions d'un interrupteur.
Note: cette réponse est pour Swift versions 1.0 et inférieur.
Fonctions de différents paramètres et types de retour sont d'un type différent, de sorte qu'ils ne peuvent pas être stockées dans un tableau d'ensemble. Ils ont également ne pas se conformer à l'un ou AnyObject protocoles.
Si vous avez des fonctions avec les mêmes paramètres, mais vous pouvez travailler autour de cela. Même si les fonctions ci-dessous le retour d'un n-uplet de la Double et un Int, ils peuvent à la fois être définie comme
() -> Any
des types de fonction.function(reinterpretCast(args))
où args est un tableau qui est converti les paramètres appropriés dans la fonctionCi-dessous est un exemple avec un tableau et d'un dictionnaire. Testé et de travail dans Xcode 6.1 (6A1046a). Notez que les fonctions de dictionnaires doit d'abord être déballé.
Cette technique n'est toutefois tombe lorsque les fonctions sont différentes de paramètre ou les types de retour, pour les raisons expliquées par connor dans sa réponse.
var actions = [add, massText] if condition { actions.insert(massMsg, at: 1) }
appel paractions[selectedIndex]()
De Swift 1.1, tous les types de fonction se conformer à Toute, alors vous pouvez avoir des fonctions dans un Tout tableau.