На мой взгляд вывод неверен.
Может быть так что мы хотели бы иметь URL для какого-то объекта и инициализировать его из статичной строки. Если мы будем использовать guard let или if let, то не получим URL и можем потратить какое-то время на поиск ошибки, которая могла быть в опечатке строки для это URL. Но если бы мы использовали let url = URL(string: "https://habr.com")!, ошибку нашли бы на много быстрее, что было бы равносильно assert.
Синглтон — это единственный экземпляр класса, который всегда присутствует в памяти. И что в нем особенного? Предположим, вы создаете приложение, которое подключается к базе данных, и вам нужно куда-то разместить все подключения. Синглтоны для этого подойдут идеально.
А что есть добавить функцию «взять попутчика», где ты уже едешь в такси и тебе приходит предложение взять попутчика (+ n минут в пути) за сколько-то процентов скидки? Логика тоже понятно как отрабатывала бы, если кто-то ищет маршрут ему предлагается сесть к попутчику тоже за скидку, получится что у первого и второго пассажира будет общая линия пути — конечная для первого и начальная для второго. Так время простоя таксиста еще сильнее сократится.
Может быть так что мы хотели бы иметь URL для какого-то объекта и инициализировать его из статичной строки. Если мы будем использовать
guard letилиif let, то не получим URL и можем потратить какое-то время на поиск ошибки, которая могла быть в опечатке строки для это URL. Но если бы мы использовалиlet url = URL(string: "https://habr.com")!, ошибку нашли бы на много быстрее, что было бы равносильноassert.Di для этого подойдут идеально