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.

Ответы на вопрос(2)

Ваш ответ на вопрос