2016-04-22 3 views
0

Не можете разворачивать дополнительный тип с Swift 2.2, Xcode версии 7.3 (7D175)Swift "охранник пусть" разворачивать не удалось

"охранник пусть" не "guard let" failed

Но "сторожевую вар" работает But "guard let" works

Пожалуйста, помогите! Что здесь происходит?

EDIT1

let localPresenter = presenter 
    let localDataSource = dataSource 
    let configurator: ViewControllerConfigurator = { inputView in 
     let a = inputView as? ChatTableViewController 
     guard var chatListController = a else { 
      throw ApplicationErrors.ModuleConfigureError.WrongViewInput 
     } 
     localPresenter.view = chatListController 
     chatListController.presenter = localPresenter 
     chatListController.tableView.dataSource = localDataSource 
    } 

edit2 Этот код работает отлично:

 let localPresenter = presenter 
     let localDataSource = dataSource 
     let configurator: ViewControllerConfigurator = { inputView in 
      let a = inputView as? ChatTableViewController 
      if let chatListController = a { 
       localPresenter.view = chatListController 
       chatListController.presenter = localPresenter 
       chatListController.tableView.dataSource = localDataSource 
      } else { 
       throw ApplicationErrors.ModuleConfigureError.WrongViewInput 
      } 
     } 
+2

Пожалуйста, укажите код ** в виде текста ** (используйте кнопку [edit]). – Moritz

+0

Прошу прощения, я не могу создать простой образец проекта. – adnako

+0

@EricD Спасибо, я это знаю, но проблема не в контрольных точках. Я не могу понять, почему охрана разворачивает переменную, но она не может развернуть константу? – adnako

ответ

0

Похоже, это ошибка в lldb. Если установить контрольную точку на линии с «охраной», а затем «охранник» не удается: enter image description here

Но если я перейду эту точку останова мимо защитного блока код работает отлично: enter image description here

+0

Это не ошибка, так оно и работает. :) Точка останова - это барьер, знак остановки: выполнение выполняется * до тех пор, пока оно не встретит точку останова *, поэтому, если вы поместите стоп * на * строку, приложение приостанавливается * непосредственно перед этой строкой *. – Moritz

+0

Прошу прощения, но почему он работает таким образом, что, когда я устанавливаю точку останова, код не работает? Что читать о его поведении? Я знаю, что точка останова в прошлом была IRQ, чтобы остановить процессор на инструкции, но похоже, что здесь что-то произошло с регистрами, поэтому код работает неправильно. Не так ли? – adnako

+0

В физике это называется «эффект наблюдателя». – adnako

 Смежные вопросы

  • Нет связанных вопросов^_^