Iniciar sesión Registro
Anuncios
Tu espacio publicitario
Reserva este slot exclusivo para el periodo elegido.
Comprar publicidad →
Logotipo de la comunidad de telegram - Затишна Галера
Añadido 06 ene. 2025 🌐 UK

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

@Zatishna_Galera
Número de suscriptores: 2 690
Fotos: 1,570
Videos: 475
Enlaces: 2,090
Descripción:
Голова Одеського центру розробки DataArt та Delivery Director, капітан Затишної Галери, ділитимуся: завданнями із співбесід (QA/Delivery/Management), статтями, вакансіями, новинами зі світу IT. Контакт: [email protected] ; Patreon: patreon.com/CozyGalley
Fuente

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

Logotipo de la comunidad de telegram - Затишна Галера Затишна Галера @Zatishna_Galera
540 Vistas/Alcance 2026-05-06 08:45 Mensaje №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 як pipeline throw 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