2016-07-18 6 views
0

Я реализую это выпадающее меню из cocoaPod. Это довольно легко реализовать, и я получил его для работы. https://github.com/PhamBaTho/BTNavigationDropdownMenu Однако, в соответствии с инструкцией, я реализованы следующие функции в viewDidLoadЯвляется ли это нормально, когда у меня есть слабое я? ПосмотритеDidLoad

 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 { 

     } 

Я ABIT обеспокоен, как Xcode говорит мне поставить? или a! сразу после себя, которое никогда не было сделано в других местах моей программы. Может кто-нибудь, пожалуйста, сообщите, если это полностью приемлемо или есть лучший способ сделать это? Просто кажется, что нечетная сила разворачивается или ставит мой VC как необязательный ...?

ответ

0

Весь смысл {[weak self] ... заключается в том, что контроллер может быть освобожден, и вы не хотите, чтобы этот блок сильно фиксировал его и сохранял в памяти, если он был выпущен любым его сообщением. Таким образом, ссылка на «я» может быть равна нулю.

Итак, вы определенно не хотите использовать !, и вы должны либо указать ?, либо if let.