Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Selector in swift3

Why doesn't this work in swift 3 ? It crashes at runtime saying:

'-[my_app_name.displayOtherAppsCtrl tap:]: unrecognized selector sent to instance 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") } } 
like image 251
Chris Avatar asked Jun 26 '16 12:06

Chris


People also ask

What are selectors in Swift?

Use Selectors to Arrange Calls to Objective-C Methods In Objective-C, a selector is a type that refers to the name of an Objective-C method. In Swift, Objective-C selectors are represented by the Selector structure, and you create them using the #selector expression.

What is perform in Swift?

Discussion. Calling the perform(_:) method is equivalent to sending the aSelector message directly to the receiver, which you do in Swift using the dot syntax.


1 Answers

Selector("tap:") should now be written as #selector(tap(gestureReconizer:))

Also, you should declare tap as func tap(_ gestureRecognizer: UITapGestureRecognizer) as per the new Swift API Guidelines in which case your selector would then become #selector(tap(_:)).

like image 117
jjatie Avatar answered Oct 17 '22 02:10

jjatie