Swift if let успешно оценивается по желанию (ноль)
У меня есть пользовательский объект с именем Field. Я в основном использую его для определения одного поля в форме.
class Field {
var name: String
var value: Any?
// initializers here...
}
Когда пользователь отправляет форму, я проверяю каждый изField
объекты, чтобы убедиться, что они содержат допустимые значения. Некоторые поля не обязательны, поэтому я иногда намеренно устанавливаюnil
кvalue
свойство как это:
field.value = nil
Это создает проблему, когда я использую if-let, чтобы определить, является ли поле нулевым или нет.
if let value = field.value {
// The field has a value, ignore it...
} else {
// Add field.name to the missing fields array. Later, show the
// missing fields in a dialog.
}
Я устанавливаю точки останова в вышеупомянутом if-else икогдаfield.value
было намеренно установлено на ноль, он проходит через блок if-let, а не остальное. Тем не менее, для полей, чьиfield.value
Я оставил неинициализированным и неназначенным,программа переходит в блок else.
Я пытался распечататьfield.value
а такжеvalue
внутри блока if-let:
if let value = field.value {
NSLog("field.value: \(field.value), value: \(value)")
}
И вот что я получаю:
field.value: необязательно (ноль), значение: ноль
Поэтому я подумал, что, возможно, с опциями, это одна вещь, которую нужно инициализировать, а другая - иметь значение ноль. Но даже добавление еще одного, если внутри if-let, не сделает компилятор счастливым:
if let value = field.value {
if value == nil { // Cannot invoke '==' with an argument list of type '(Any, NilLiteralConvertible)'
}
}
Как мне обойти это? Я просто хочу проверить, еслиfield.value
являетсяnil
.