Login Sign Up
Advert
Your ad spot
Reserve this exclusive slot for the selected period.
Buy advertising →
Telegram community logo - Затишна Галера
Added 06 Jan 2025

Затишна Галера

@Zatishna_Galera
Number of subscribers: 2 705
Photos: 1,340
Videos: 429
Links: 1,810
Description:
Голова Одеського центру розробки DataArt та Delivery Director, капітан Затишної Галери, ділитимуся: завданнями із співбесід (QA/Delivery/Management), статтями, вакансіями, новинами зі світу IT. Контакт: [email protected] ; Patreon: patreon.com/CozyGalley
Source

Затишна Галера | iOSКомпас 🧭1️⃣5️⃣3️⃣ Завдання 153Які переваги typed throws?Доброго здр...

Telegram community logo - Затишна Галера Затишна Галера @Zatishna_Galera
540 Views/Reach 2026-05-06 08:45 Message №2633
#iOSКомпас 🧭1️⃣5️⃣3️⃣ Завдання 153Які переваги typed throws?Доброго здровля мої любі друзі. З вами ваш незмінний ios розробник Сергій з @badlinkschannel.У Swift 6 зʼявився typed throws, але його головна цінність — не в синтаксисі, а в тому, що він дозволяє перетворити помилки на контракт системи.1️⃣ Errors як частина API-контрактуfunc fetchUser() throws(NetworkError) -> User Це вже не просто «може впасти» - це: явний failure surface контрольований набір помилок можливість будувати predictable flowsФактично, errors стають частиною public API, як return type.2️⃣ Проблема: типізація ≠ архітектураTyped throws не вирішує: як передавати контекст між шарами як не втратити причину помилки як розділити UX / debug / telemetryБільшість кодбаз усе ще мають:throw NSError(...) або плоскі enum-и без контексту.3️⃣ Layered Error Model (ключова ідея)Помилка - це не значення. Це ланцюг трансформацій через шари системи:[Infrastructure] → [Networking] → [Domain] → [Presentation] Кожен шар: обгортає помилку додає свій контекст не знищує попередній4️⃣ Базовий протокол системи помилокprotocol SystemError: Error { var userMessage: String { get } var debugMessage: String { get } var underlying: Error? { get }} Це дає: separation of concerns можливість централізованого логування контроль над тим, що «виходить назовні»5️⃣ Error propagation як pipelinethrow DomainError.userNotFound( underlying: APIError.notFound( underlying: NetworkError.timeout )) Що важливо: жоден шар не втрачає інформацію можна витягнути будь-який рівень: для retry логіки, для analytics, для feature flags6️⃣ Typed throws + layering = сильна комбінаціяTyped throws: обмежує surface помилокLayering: додає глибину і контекстРазом: compile-time safety runtime observability7️⃣ Наслідки для системиЦе впливає на:Logging / Observability structured error chain нормальний Sentry/Crashlytics контекстRetry / Resilience можна реагувати на конкретний underlying errorClean Architecture чітке розділення між шарами відсутність leakage інфраструктури в UITesting простіше мокати і перевіряти конкретні failure cases8️⃣ Антипатерни Flattened errors Втрата underlying Mixing user/debug messages «Any Error everywhere»🔣 Typed throws - це про контроль поверхні🔣 Layered errors - це про контроль глибиниРазом вони дають: передбачувану систему прозору діагностику масштабовану архітектуру@Zatishna_Galera