TGViewer
Мобильная разработка Мобильная разработка @mobi_dev · 13.1K subscribers
Post #3645 5.87K
Создаем идеальный сетевой слой в Swift

Пора распутать URLSession вызовы в вашем коде и навсегда избавиться от этой проблемы.

Вместо URLSession.shared везде — создаем NetworkClient протокол:

protocol NetworkClient {
func send<T: Decodable>(_ request: URLRequest) async throws -> T
}


URLProtocolStub позволяет перехватывать все запросы и возвращать mock-данные. Никаких реальных API в тестах!

Dependency Injection:

class UserService {
private let networkClient: NetworkClient
init(networkClient: NetworkClient) {
self.networkClient = networkClient
}
}


Что получаем:

• Один NetworkError enum вместо хаоса
• Легко подменяемые зависимости
• Async/await вместо completion handlers
• Код, который не стыдно показать коллегам
  • 👍 12
  • ❤ 6
  • 🔥 5
More from @mobi_dev
  1. Oct 3, 2026Android CLI получил Device Streaming для тестов на реальных смартфонах Google добавила в A…
  2. Oct 1, 2026Как адаптировать модальные экраны SwiftUI к сгибу iPhone Duo На iPhone Duo модальный экран…
  3. Oct 1, 2026Как проверять другую ветку в Android Studio через Git worktree Git worktree создаёт для ве…
  4. Oct 1, 2026Как заставить VoiceOver озвучивать карточку SwiftUI целиком Составную карточку с иконкой,…
  5. Sep 30, 2026Liquid Glass в SwiftUI: как выбрать regular или clear на iOS 26 Модификатор glassEffect()…
  6. Sep 30, 2026Как проверить Auto Layout в iOS 26 на iPhone 17 и Air У iPhone 17 и 17 Pro логическая обла…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →