Почему дополнительная константа автоматически не имеет значения по умолчанию nil

Следующий код работает отлично

struct carConfi {
    var owner: String?
    let brand: String = "BMW"
    var currentMile: Double = 2000
}

let tomCar = carConfi()

Однако, если я изменил тип свойства owner на константу, в инициализаторе будет ошибка:

struct carConfi {
        let owner: String? // Change to constant
        let brand: String = "BMW"
        var currentMile: Double = 2000
    }

let tomCar = carConfi() //error: missing argument for parameter 'owner' in call 

Я сделал небольшой поиск, оказалось, что это связано с тем, что дополнительные переменные автоматически имеют значение по умолчанию nil

Я полагаю:. Поскольку после установки константы она не может быть изменена, если факультативная константа автоматически получает nil, то она будет сохранять неизменную nil, что очень глупо и может против пользователей

Вопрос: Мой колледж не полностью убежден в предположении, он сказал мне, что для этого должно быть больше причин. Я был бы очень признателен, если кто-нибудь сможет это объяснить мне

спасибо

Ответ 1

Не устанавливать поле только для чтения (постоянное) с помощью:

  • выражение инициализации
  • инициализатор

почти наверняка является признаком ошибки в вашей программе.

Поскольку у вас нет другой возможности установить значение вашего поля let, значение поля останется nil (или другого значения по умолчанию). Маловероятно, чтобы программист нашел такое поведение желательным и запросил его специально.

Вот почему Swift отмечает эту ситуацию как ошибку. С другой стороны, если вы действительно хотите, чтобы ваша константа String оставалась nil, вы могли бы добавить выражение, чтобы установить его на nil, и отключить ошибку:

let owner: String? = nil // Pretty useless, but allowed

Ответ 2

Константы устанавливаются один раз и один раз. Если вы хотите, чтобы он был нулевым или 0, вы должны установить его. Вы всегда определяете константу при инициации.