How to fix an 'Optional nil' on a RevealViewController() Gesture Recognizer?

175 Views Asked by At

I'm trying to add a tap and pan gesture recognizer to my RevealViewController() and I'm getting a Value of optional type 'UIGestureRecognizer?' must be unwrapped. How should I unwrap this?

// My App

enter image description here enter image description here

// Main.storyboard

enter image description here

// HomeVC

override func viewDidLoad() {
   super.viewDidLoad()

    menuBtn.addTarget(self.revealViewController(), action: #selector(SWRevealViewController.revealToggle(_:)), for: .touchUpInside)
    if self.revealViewController() != nil{
        self.view.addGestureRecognizer(self.revealViewController()!.tapGestureRecognizer())
        self.view.addGestureRecognizer(self.revealViewController()!.panGestureRecognizer())
    }
}
2

There are 2 best solutions below

1
Newbie On

This question is vague and you didn't provide a lot of context so excuse the answer if it's not exactly what you need but why not do a simple if let statement to gracefully unwrap it.

if let gestureTap = self.revealViewController()?.tapGestureRecognizer(){
     if let gesturePan = self.revealViewController()?.panGestureRecognizer(){

self.view.addGestureRecognizer(gestureTap)
    self.view.addGestureRecognizer(gesturePan)
     }
}
0
ZWDesigns On

I got the tap and pan gesture recognizers by adding:

menuBtn.addTarget(self.revealViewController(), action: #selector(SWRevealViewController.revealToggle(_:)), for: .touchUpInside)

menuBtn.addTarget(self.revealViewController(), action: #selector(SWRevealViewController.panGestureRecognizer), for: .touchUpInside)

menuBtn.addTarget(self.revealViewController(), action: #selector(SWRevealViewController.tapGestureRecognizer), for: .touchUpInside)