2017-11-18 464 views
2

我用Swift 4編寫並嘗試編寫一個函數,發送categoryId作爲操作,但我無法寫入。我認爲我的語法是錯誤的。如果我寫函數沒有參數它不是一個問題但我得到參數函數的錯誤。你能說我如何使用選擇器嗎?Swift 4使用選擇器與多個參數

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

我得到一個錯誤,說動作選擇器沒有引用任何objc方法。

+0

檢查[該線程](https://stackoverflow.com/q/43251708/6541007)或[此](HTTPS:/ /stackoverflow.com/a/24814958/6541007)。 Swift 4沒有提及'#selector'的用法。 – OOPer

+0

這可能幫助:https://stackoverflow.com/questions/19703767/pass-parameter-to-uitapgesturerecognizer – ozgur

+0

FUNC sendCategoryIdToPackageSelectionVC(的categoryId:智力){ self.performSegue(withIdentifier: 「sequeGoToPackageSelection」,發件人:無) } @objc FUNC callMethod(){ sendCategoryIdToPackageSelectionVC(的categoryId:2) } FUNC addTapFeatures(){ taplabel1 = UITapGestureRecognizer(目標:自,動作:#selector(self.callMethod))? taplabel1 .cancelsTouchesInView =假 } – Yongjoon

回答

0

我想,你不能直接使用選擇器來傳遞參數。 嘗試一下這樣的事情 你應該創建一個調用handleTap(modelObj:myModelObj)的@objc方法。

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

然後就可以通過這作爲選擇器:

#selector(someMethod)