Быстрые опции - привязка переменной в состоянии требует инициализатора
Я новичок в Swift и пытаюсь понять концепцию Факультативного. У меня есть небольшая часть кода в Playground, которая дает мне "Переменная привязка в состоянии требует ошибки инициализатора". Может кто-нибудь объяснить, почему и как я могу это исправить?
Я хочу только напечатать "Да" или "Нет" в зависимости от того, имеет ли значение "score1" значение или нет. Вот код:
import Cocoa
class Person {
var score1: Int? = 9
func sum() {
if let score1 {
print("yes")
} else {
print("No")
}
}//end sum
}// end person
var objperson = person()
objperson.sum()
Ответы
Ответ 1
Оператор if let принимает необязательную переменную. Если он равен нулю, блок else или ничего не выполняется. Если оно имеет значение, значение присваивается другой переменной как необязательный тип.
Таким образом, следующий код выводит значение score1 или "No", если его нет:
if let score1Unwrapped = score1
{
print(score1Unwrapped)
}
else
{
print("No")
}
Более коротким вариантом будет:
print(score1 ?? "No")
В вашем случае, когда вы фактически не используете значение, хранящееся в необязательной переменной, вы также можете проверить, равно ли значение nil:
if score1 != nil {
...
}
Ответ 2
Письмо
if let score1 {
не имеет смысла. Если вы хотите узнать, имеет ли оценка ценность, используйте
if score1 != nil {
или
if let score = score1 {
Последний случай связывает новый необязательный постоянный score
с score1
. Это позволяет использовать score
внутри оператора if.
Ответ 3
проблема в том, что if let
предполагается, что вы хотите создать постоянный score1
с некоторым значением. Если вы просто хотите проверить, содержит ли оно значение, как и в nil
вы должны просто сделать это, как показано ниже:
if score1! != nil {
// println("yes")
Таким образом, ваш полный код будет выглядеть так:
class Person {
var score1: Int? = 9
func sum() {
if score1 != nil {
println("yes")
}
else {
println("no")
}
}
}
var objperson = Person()
objperson.sum()