Константа ‘XXX’, используемая перед инициализацией

#swift

#swift

Вопрос:

Я новичок в swift .. кто-нибудь поможет мне понять, почему возникает эта ошибка

Константа ‘parsedResult’, используемая перед инициализацией

с другой стороны, если я установлю return , catch то ошибка компиляции исчезнет.каково отношение друг к другу. объясните, пожалуйста.

Вот мой код :

  if let data = data {
     let parsedResult : AnyObject!
          do {
              parsedResult = try NSJSONSerialization.JSONObjectWithData(data, options: .AllowFragments)
                                            }
           catch{
                print("something  worng ")
                // return

             }
             // error compiler error this line 
                    print(parsedResult)
         }
 

Комментарии:

1. прокомментируйте, пожалуйста. почему проголосовали против

Ответ №1:

Это легко исправить, объявив ParseResult как AnyObject? это означает, что она будет инициализирована до нуля. При печати будет выведено необязательное значение, которое оно может выполнить просто отлично.

Будьте осторожны со словами, которые вы используете. «// ошибка в этой строке » полностью вводит в заблуждение. В этой строке нет ошибки. Во время выполнения возникают ошибки. Компилятор сообщает об ошибке в этой строке. Будьте точны.

Ответ №2:

То, как у вас есть ваш код в настоящее время, parsedResult может быть неинициализировано, когда вы дойдете до print(parsedResult) инструкции.

Это может быть в том случае, когда try оператор выдает ошибку. parsedResult все равно будет неинициализирована, программа продолжит работу с catch блоком, напечатает «что-то не так», а затем просто продолжит (пытается печатать parsedResult ).

Однако, если вы вставляете a return в свой catch блок, это гарантирует, что в случае ошибки вы не перейдете к print(parsedResult) строке.