Jetez un œil à cet exemple de code:
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let letterButton = UIButton.buttonWithType(.Custom) as UIButton
self.view.addSubview(letterButton)
letterButton.addTarget(self, action:Selector("buttonDidTap:"), forControlEvents: .TouchUpInside)
}
func buttonDidTap(button: UIButton!) {
print(button.char)
}
}
L'action cible pour UIButton
fonctionne correctement tant que le sélecteur est public ou internal, mais si c'est private, il se bloque en raison de sélecteur non reconnu envoyé à l'instance
Existe-t-il un moyen pour y parvenir? Je ne veux pas rendre la fonction tap publique ou interne.
vous avez besoin @objc
pour exposer une méthode privée au runtime objc
@objc private func buttonDidTap(button:UIButton!) {
println(button.char)
}
De Notes de version Xcode6 beta4
Les déclarations marquées comme privées ne sont pas exposées au runtime Objective-C si elles ne sont pas annotées autrement. Les points de vente IB, les actions IB et les propriétés gérées Core Data restent exposés à Objective-C quel que soit leur niveau d'accès. Si vous avez besoin d'une méthode ou d'une propriété privée pouvant être appelée à partir d'Objective-C (comme pour une ancienne API qui utilise un rappel basé sur un sélecteur), ajoutez explicitement l'attribut @objc à la déclaration.! !