Как обрабатывать пустой маркер в iOS
Что проверяют
Формулировка размытая, и отчасти проверяют именно это: уточните ли вы, о каком маркере речь. Обычно имеют в виду пустое значение в данных (поле из API, ввод пользователя) или маркер на карте без координат и подписи. Суть одна: различаете ли вы «значения нет» и «значение пустое» и обрабатываете ли это на правильном слое.
Как отвечать
Начните с уточняющего вопроса, потом дайте каркас. Для данных:
nilи пустая строка: разные состояния.nilзначит «не пришло»,""значит «пришло пустым». Оба разом проверяетtext?.isEmpty ?? true, а для пользовательского ввода добавьтеtrimmingCharacters(in: .whitespacesAndNewlines), иначе строка из пробелов пройдёт;- Codable:
decodeIfPresentвернётnilи для отсутствующего ключа, и дляnull, а пустую строку оставит пустой строкой. Если бэкенд шлёт""вместоnull, нормализуйте это в своёмinit(from:)один раз на границе, а не проверками по всему коду; - модель: вместо магических значений вроде
-1или"none"используйте опционал илиenumс явным случаем.empty, тогда компилятор заставит обработать пустое состояние вswitch; - интерфейс: для пустого значения нужен понятный плейсхолдер или экран пустого состояния, а не пустая ячейка.
Для карты: у MKAnnotationView без заголовка аннотации выноска не появится, даже если canShowCallout включён. Координаты перед добавлением проверяют через CLLocationCoordinate2DIsValid и отдельно ловят (0, 0): такая точка в океане обычно означает, что поле не заполнили. Такие маркеры лучше не показывать вовсе, а в лог записать, откуда пришли данные.
Где спотыкаются
Разворачивают опционал через !, потому что «сервер всегда присылает». Однажды не пришлёт, и это краш у пользователей.
Проверяют только nil и пропускают пустую строку или строку из пробелов. В интерфейсе появляются пустые метки и маркеры без подписи.
Размазывают проверки на пустоту по всем экранам вместо того, чтобы нормализовать данные при декодировании. Через полгода в одном месте пустое поле обработано, а в трёх других нет.