Swift: если переменная a не является необязательной, тогда почему переменная b является необязательной?

Я пытаюсь понять Неявно развернутый необязательный параметр в быстром, меня смущает вторая переменная, как на изображении ниже.

см. изображение здесь

Почему переменная b необязательна?


person Community    schedule 31.07.2017    source источник
comment
Поскольку он не имеет явного объявления типа и имеет значение из. Попробуйте установить :Int как тип   -  person David Luque    schedule 31.07.2017
comment
Пожалуйста, публикуйте код, не изображения.   -  person Martin R    schedule 31.07.2017
comment
craiggrummitt.com / 2016/06/29 / это может вам помочь   -  person jithin    schedule 31.07.2017


Ответы (1)


Переменная b является необязательной, потому что переменная a 'может' вернуть ноль, и в этом случае b также будет ноль.

Изменить: вы назначили необязательную переменную другой переменной, для которой вы не определили конкретный тип. Xcode спасает вас, создав переменную b как необязательную. Рассмотрим этот пример:

var a: Int! = 6
a = nil
let b: Int = a
print(b)

Как и ваша, здесь переменная a является необязательной для типа Int, а b также является необязательной для типа Int. Здесь я специально определяю b как необязательное целое число, в отличие от вашей переменной b. Теперь, если я попытаюсь напечатать переменную, которой присвоено значение a, которое в этот момент было nil. Это опасно и просто приводит к фатальной ошибке в операторе присваивания. Сбой легко понять, потому что компилятор находит значение nil в необязательном типе и пытается присвоить его необязательному типу.

Только необязательные параметры могут содержать нулевое значение, поэтому, когда вы назначаете необязательное (допускающее значение) значение другой переменной b, оно автоматически обрабатывается как необязательное, поскольку значение, на которое оно опирается, допускает нулевое значение и, следовательно, переменная b также допускает нулевое значение.

person Rishabh    schedule 31.07.2017
comment
как это может быть возможно, что это может быть ноль, оно не является необязательным, а необязательные параметры никогда не будут равны нулю. Если можно, приведите пример. - person ; 31.07.2017
comment
надеюсь, что редактирование поможет .. - person Rishabh; 31.07.2017
comment
Большое спасибо, теперь я понял. - person ; 01.08.2017