Pour la plupart, Swift est une énorme amélioration par rapport à Objective-C en termes de sécurité de type. Une exception flagrante est celle des sélecteurs. En Objective-C, l'utilisation de l'expression donnera un avertissement du compilateur. L'équivalent Swift, Selector("notARealSelector:")
sera toujours compiler mais échouera à l'exécution.Existe-t-il un moyen sûr d'utiliser les sélecteurs dans Swift?
Existe-t-il un moyen sûr d'utiliser des sélecteurs dans Swift, afin que je puisse travailler avec les API Objective-C qui en ont besoin?
J'ai beaucoup de NSNotification
observateurs dans mon application et je voudrais avoir une sorte de vérification à la compilation que je ne fais pas de fautes de frappe dans mes sélecteurs.
Édition: Le cas d'utilisation spécifique est NSNotificationCenter.addObserver
.
Pouvez-vous donner un exemple de la façon dont vous utilisez le '@selector()' bloque-t-il actuellement? Est-ce que les objets que vous appelez ces méthodes s'exposent (soit par la conformité du protocole, soit par le sous-classement) aux méthodes à tout moment? Vous pouvez utiliser 'myDelegate? .scrollViewDidScroll? (...)', mais cela nécessite que le délégué se conforme au moins au protocole afin que le compilateur ait une chance de déterminer s'il est possible que cette méthode soit là. –
Comme je l'ai dit dans la question, 'NSNotificationCenter.addObserver' – Bill
Une autre utilisation courante de @selector est la cible/action utilisée par' UIControl' et ses sous-classes. par exemple. 'button.addTarget (self, action:" doTap ", forControlEvents: .TouchUpInside)' - frustrant que le compilateur rapide ne puisse pas avertir des erreurs dues aux fautes de frappe ou aux noms de méthodes changeant. –