2016-07-18 24 views
0

zu haben Ich implementiere dieses Dropdown-Menü von CocoaPod. Es ist ziemlich einfach zu implementieren und ich habe es zur Arbeit gebracht. https://github.com/PhamBaTho/BTNavigationDropdownMenu jedoch gemäß Anweisung habe ich die folgenden Funktionen in viewDidLoadIst OK, um schwache Selbst in ViewDidLoad

 self.navigationItem.titleView = menuView 
    menuView.didSelectItemAtIndexHandler = {[weak self] (indexPath: Int) ->() in 
     print("Did select item at index: \(indexPath)") 

     if indexPath == 0 { 
      print("Closest") 
      self?.sortByDistance() 
     } else if indexPath == 1 { 
      print("Popular") 
      self?.sortByRatings() 
     } else if indexPath == 2 { 
      print("My Posts") 
      self?.myPosts() 
     } else { 

     } 

Ich bin abit besorgt wie Xcode umgesetzt sagt mir ein setzen? oder ein ! kurz nach mir selbst, was an anderen Stellen meines Programms nie gemacht wurde. Könnte jemand bitte mitteilen, ob dies völlig akzeptabel ist oder gibt es einen besseren Weg? Es scheint nur seltsame Kraft auszupacken oder meinen VC als optional zu setzen ...?

Antwort

0

Der ganze Punkt von {[weak self] ... ist, dass der Controller freigegeben werden kann und Sie nicht möchten, dass dieser Block es stark erfasst und es im Speicher behält, wenn es von was auch immer präsentiert wurde es freigegeben wurde. Als solche kann der Bezug auf sich selbst Null sein.

Also, Sie wollen definitiv nicht ! verwenden, und Sie sollten entweder Benutzer ? oder und if let überprüfen.