init? может вернуть nil, если вход невалиден; создаёт optional экземпляра.
Разбор
- Типично для парсинга:
Int(string), URL(string:).
init! — IUO-результат (редко нужен).
- Альтернатива —
throws init для детальных ошибок.
- Цепочки init вызывают
return nil для провала.
Итог
init? моделирует «создание может не удаться» без throw.