На самом деле это не 3 сообщения об ошибках.Это 1 сообщение об ошибке, плюс 2 предложенных способа его решения.
Условие в операторе if
должно быть Bool
, но у вас есть выражение Bool("")
типа Bool?
.,Компилятор видит, что это просто Bool
, завернутый в необязательный элемент, поэтому он предлагает способы развернуть необязательный элемент, чтобы получить тип, ожидаемый оператором if
- Bool
.
.Первый предложенный способ - указать значение по умолчанию для Bool("")
, равное nil
, используя оператор ??
] 1 , например:
if Bool("") ?? true {}
Второй способ:Принудительно разверните его, по сути, аварийно завершив работу программы, если Bool("")
равен nil
:
if Bool("")! {}
Хотя в этом случае оба эти способа исправить это довольно глупо, поскольку Bool("")
всегда равно нулю.Но дело в том, что это два способа, которые предложит компилятор, когда вам нужно развернуть необязательный.
Переходя ко второму вопросу, почему Bool.init
возвращает необязательный?
Инициализаторы могут возвращать nil
, поскольку они могут давать сбой , и эти инициализаторы называются сбойными инициализаторами .Инициализация Bool
с помощью String
может завершиться неудачно, поскольку только строки "true" и "false" будут успешно создавать Bool
s.Все остальные строки не представляют значения Bool
.