Selector en swift3

¿Por qué esto no funciona en swift 3? Se bloquea en tiempo de ejecución diciendo:

‘- [my_app_name.displayOtherAppsCtrl tap:]: selector no reconocido enviado a la instancia 0x17eceb70′

override func viewDidLoad() { super.viewDidLoad() // Uncomment the following line to preserve selection between presentations // self.clearsSelectionOnViewWillAppear = false // Register cell classes //self.collectionView!.register(ImageCell.self, forCellWithReuseIdentifier: reuseIdentifier) // Do any additional setup after loading the view. let lpgr = UITapGestureRecognizer(target: self, action: Selector("tap:")) lpgr.delegate = self collectionView?.addGestureRecognizer(lpgr) } func tap(gestureReconizer: UITapGestureRecognizer) { if gestureReconizer.state != UIGestureRecognizerState.ended { return } let p = gestureReconizer.location(in: self.collectionView) let indexPath = self.collectionView?.indexPathForItem(at: p) if let index = indexPath { //var cell = self.collectionView?.cellForItem(at: index) // do stuff with your cell, for example print the indexPath print(index.row) } else { print("Could not find index path") } } 

Selector("tap:") ahora debe escribirse como #selector(tap(gestureReconizer:))

Además, debe declarar el tap como func tap(_ gestureRecognizer: UITapGestureRecognizer) acuerdo con las nuevas Pautas Swift API, en cuyo caso su selector se convertiría en #selector(tap(_:)) .

En Swift 3 funciona así:

 @IBOutlet var myView: UIView! override func viewDidLoad() { super.viewDidLoad() let tap = UITapGestureRecognizer(target: self, action:#selector(handleTap)) myView.addGestureRecognizer(tap) } func handleTap() { print("tapped") } 

Swift 3 vino con una nueva syntax, así que en lugar de usar Selector (“tap:”), #selector (tap (gestureReconizer :)) es

Swift 3:

 class MYPTempController: UIViewController { override func viewDidLoad() { super.viewDidLoad() let btn = UIButton(frame: CGRect(x: 0, y: 0, width: 100, height: 100)) view.addSubview(btn) btn.addTarget(self, action: #selector(MYPTempController.btnClick), for: .touchUpInside) } @objc fileprivate func btnClick() { print("--click--") } } 

 //带参数btn.addTarget(self, action: #selector(MYPTempController.btnClick(_:)), for: .touchUpInside) //监听方法func btnClick(_ sender: UIButton) { print("--click--") }