tutorial the programming objective language curso apple ios swift

ios - objective - the swift programming language pdf



Swift control de acceso con selectores de objetivos (1)

Echa un vistazo a este código de ejemplo:

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) } }

La acción de destino para UIButton funciona bien siempre que Selector sea público o interno , pero si es privado , se bloquea debido a un selector no reconocido enviado a la instancia

¿Hay alguna manera de que pueda lograr esto? No quiero que la función de tap sea pública o interna.


necesitas @objc para exponer un método privado a objc runtime

@objc private func buttonDidTap(button:UIButton!) { println(button.char) }

De las notas de la versión Xcode6 beta4

Las declaraciones marcadas como privadas no están expuestas al tiempo de ejecución de Objective-C si no están anotadas. Los puntos de venta de IB, las acciones de IB y las propiedades administradas de Datos centrales permanecen expuestos a Objective-C sea cual sea su nivel de acceso. Si necesita un método o propiedad privada para ser invocada desde Objective-C (como una API anterior que usa una devolución de llamada basada en selector), agregue el atributo @objc a la declaración explícitamente. !