Почему я не могу объявить переменную и быстро не присвоить ей какое-либо значение, которое будет использоваться позже?

Хорошо, я понимаю концепцию опций и значения nil, а также то, как Swift хочет защитить ваш код от errors

Swift отлично умеет делать выводы variables. Но почему компилятор Swift не принимает только объявленную переменную.

То есть, зачем

let unInitializedVariable: Int

выдает ошибку или еще не разрешено, если я скажу

let unInitializedVariable: Int? = nil

тогда компилятор доволен. Было бы бессмысленно, если бы, скажем, компилятор пришел к выводу, что первый оператор совпадает с последующим выражением? Может кто-нибудь объяснить.


person Bob Masajjage    schedule 03.04.2020    source источник
comment
Вам нужно будет установить unInitializedVariable позже в вашем коде. Проверьте это stackoverflow.com/a/47585714/2303865   -  person Leo Dabus    schedule 04.04.2020


Ответы (1)


Дело не в том, что компилятор не может этого сделать. Не хочет. Безопасность типов означает, что вы получаете нужный тип.

Инт? и Int очень разные. Int означает, что у вас есть значение, Int? означает, что вы можете иметь или не иметь ценность.

С JSONDecoder, если у вас есть структура с Int, вы получите сообщение об ошибке, если ее ключ и значение отсутствуют. Если это Int? его не волнует, есть он там или нет. Int и Int? выглядят одинаково, но работают по-разному.

person HalR    schedule 03.04.2020