Почему дополнительная константа автоматически не имеет значения по умолчанию 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, вы должны установить его. Вы всегда определяете константу при инициации.