Это происходит потому, что swift компилирует ваш код и замечает, что ваше значение var v:String;
необъявлено перед использованием, что делает его "необязательным" значением.Даже если вы присваиваете его в операторе if, если бы вы избавились от значения true
, вполне возможно, что оператор if никогда не будет выполняться, поэтому никакое значение никогда не будет сохранено в v, поэтому оно будет использоваться раньше "назначено ".
Таким образом, чтобы ответить на ваш вопрос, если вы хотите, чтобы ваше значение было необязательным и возможным пустым значением, объявите v следующим var v:String?
, если вы хотите, чтобы оно было необязательным значением со значениемвсегда хранится в v, вы должны объявить его следующим образом var v = ""
.Swift будет интерпретировать это объявление как строку.
Чтобы ответить на ваш второй вопрос, определение без значений в swift допускается на 100%, на самом деле это зависит только от того, как вы хотите обработать свой код.Я все время использую необязательные значения в своем коде, но мне не обязательно нравятся необязательные значения, поэтому я обычно хотел бы объявлять свои значения, такие как var v = ""
, таким образом, если значение пусто, мой пользовательский интерфейс или что-то еще, чем я манипулирую, выиграл 'т перерыв.Но если мне нужно убедиться, что значение присутствует, мне придется сделать мое значение необязательным, чтобы я мог использовать оператор if, чтобы проверить, является ли оно допустимым значением.
Более короткая версия того, что я пытаюсь сделатьскажем, вы получаете предупреждение компилятора, потому что вы объявляете v
как необязательное значение, а не как необязательное значение.