#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)
строке.