I am setting up swipe recognition in my SKScene, and I found that hard coding all the recognizers takes time and isn't really neat, so I decided to use a for-loop, and a dictionary that contains UISwipeRecognizer
s as keys, and ()
functions as values. The problem is that it gives me the error in the title while trying to add the target using recognizer.addTarget(self, action: #selector(functionForRecognizer[recognizer]!))
Here is the code:
class xxxxx: SKScene {
let rightSwipeRecognizer = UISwipeGestureRecognizer()
let leftSwipeRecognizer = UISwipeGestureRecognizer()
let upSwipeRecognizer = UISwipeGestureRecognizer()
let downSwipeRecognizer = UISwipeGestureRecognizer()
var swipeRecognizers: [UISwipeGestureRecognizer] {
return [rightSwipeRecognizer, leftSwipeRecognizer, upSwipeRecognizer, downSwipeRecognizer]
}
var directionForRecognizer: [UISwipeGestureRecognizer : UISwipeGestureRecognizerDirection] {
return [
rightSwipeRecognizer : .right,
leftSwipeRecognizer : .left,
upSwipeRecognizer : .up,
downSwipeRecognizer : .down
]
}
func didSwipeRight() {}
func didSwipeLeft() {}
func didSwipeUp() {}
func didSwipeDown() {}
var functionForRecognizer: [UISwipeGestureRecognizer : ()] {
return [
rightSwipeRecognizer : didSwipeRight(),
leftSwipeRecognizer : didSwipeLeft(),
upSwipeRecognizer : didSwipeUp(),
downSwipeRecognizer : didSwipeDown()
]
}
func setupSwipeRecognizers() {
for recognizer in swipeRecognizers {
recognizer.addTarget(self, action: #selector(functionForRecognizer[recognizer]!))
recognizer.direction = directionForRecognizer[recognizer]!
self.view?.addGestureRecognizer(recognizer)
}
}
override func didMove(to view: SKView) {
super.didMove(to: view)
setupSwipeRecognizers()
}
}
Btw, i tried putting @objc
while declaring the functions, but it didn't work. Also, I tried exposing the class to NSObject, by removing inheritance from SKScene and conforming to NSObject, and still, it didn't work. Moreover, i cannot conform the class to a UIKit class, cz i need it as a SKScene, and even, i tried conforming it to a UIViewController (without SKScene, of course), but still didn't work,