Sunt într-o situație destul de inedită în care pe un subview – fullScreenConnectView – am definit în viewDidLoad un TapGestureRecognizer pe care l-am atașat subview-ului.
let gestureClickFullScreen = UITapGestureRecognizer(target: self, action: #selector(self.connectClickFullScreen(_:)))
self.fullScreenConnectView.addGestureRecognizer(gestureClickFullScreen)
Totul e bun și frumos însă trebuie la un moment dat sa elimin acest GestureRecognizer pe care l-am adaugat în viewDidLoad. Nu mai am de-a face cu instanța de UITapGestureRecognizer, aceasta existând doar în viewDidLoad. Poate o soluție pentru eliminarea TapGestureRecognizer este să-l declarat global. Însă am căutat o cale prin care să elimin acest TapGestureRecognizer fără să am acea instanță ținută inutil pe tot parcursul aplicației.
O soluție la îndemână pentru această problemă este:
self.fullScreenConnectView.gestureRecognizers?.forEach(self.fullScreenConnectView.removeGestureRecognizer)
Acest lucru este posibil deoarece agregatorul UIView.gestureRecognizers este în IOS 10 un vector, deci numai bun de parcurs și eliminat din el tot ce este în plus.
public var gestureRecognizers: [UIGestureRecognizer]?
Pe baza acestei ultime observații putem scrie un cod mai puțin swifty sub forma:
for recognizer in subview.gestureRecognizers ?? [ ] {
subview.removeGestureRecognizer(recognizer)
}