2017-11-18 2 views
2

Ich schreibe mit Swift 4 und versuche, eine Funktion zu schreiben, die categoryId als Aktion senden, aber ich konnte nicht schreiben .Ich denke, meine Syntax ist falsch.Wenn ich Funktion ohne Parameter schreiben ist es kein Problem aber ich bekomme Fehler mit Parameterfunktionen. Können Sie mir sagen, wie man Selektor benutzt?Swift 4 mit Selektor mit mehreren Parametern

@objc func sendCategoryIdToPackageSelectionVC(categoryId : Int){ 
     MarketVC.categoryId = categoryId 
     self.performSegue(withIdentifier: "sequeGoToPackageSelection", sender: nil) 
    } 

func addTapFeatures(){ 
     taplabel1 = UITapGestureRecognizer(target: self, action: #selector(self.sendCategoryIdToPackageSelectionVC(categoryId:2))) 
     taplabel1?.cancelsTouchesInView = false 
     self.labelFirst.addGestureRecognizer(taplabel1!) 
} 

Ich bekomme einen Fehler, der besagt, dass der Aktionsselektor sich nicht auf eine objc-Methode bezieht.

+0

Check [Dieses Thema] (https://stackoverflow.com/q/43251708/6541007) oder [diese] (https://stackoverflow.com/a/24814958/6541007). Nichts Neues in Swift 4 über die Verwendung von '# selector'. – OOPer

+0

Dies könnte helfen: https://stackoverflow.com/questions/19703767/pass-parameter-to-uitapgesturerecognizer – ozgur

+0

func sendCategoryIdToPackageSelectionVC (categoryId: Int) { self.performSegue (withIdentifier: "sequeGoToPackageSelection", Absender: null) } @objc func Callmethod() { sendCategoryIdToPackageSelectionVC (categoryId: 2) } func addTapFeatures() { taplabel1 = UITapGestureRecognizer (Ziel: selbst, action: #selector (self.callMethod))? taplabel1 .cancelsTouchesInView = false } – Yongjoon

Antwort

0

Ich denke, Sie können nicht direkt Selektor verwenden, um Parameter zu übergeben. versuchen Sie etwas wie diese sollten Sie eine @objc-Methode erstellen, die handleTap (ModelObj: myModelObj) aufruft.

@objc func someMethod() { // name this properly! 
    handleTap(modelObj: myModelObj) 
} 

Dann können Sie diese als Selektor übergeben:

#selector(someMethod)