> Как организовать сетевые вызовы в iOS проекте (iOS, Swift)

Уровень: senior · Роль: mobile · Категория: Технические вопросы

Компании: Bip.ru

Стек: iOS, Swift

> Пример ответа

В iOS-проектах сетевые вызовы обычно организуются с помощью слоя абстракции поверх URLSession. Рекомендуемый подход - использовать протоколы для сервисов и менеджеров сети, что упрощает тестирование и замену реализации.

Пример типовой архитектуры:

  1. Создание протокола сетевого клиента:
SWIFT
protocol NetworkClient {
func request<T: Decodable>(_ endpoint: Endpoint) async throws -> T
}
  1. Реализация через URLSession:
SWIFT
final class URLSessionNetworkClient: NetworkClient {
private let session: URLSession
private let decoder: JSONDecoder
init(session: URLSession = .shared, decoder: JSONDecoder = .init()) {
self.session = session
self.decoder = decoder
}
func request<T: Decodable>(_ endpoint: Endpoint) async throws -> T {
let request = try endpoint.makeRequest()
let (data, response) = try await session.data(for: request)
guard let httpResponse = response as? HTTPURLResponse,
(200...299).contains(httpResponse.statusCode) else {
throw NetworkError.invalidResponse
}
return try decoder.decode(T.self, from: data)
}
}
  1. Определение эндпоинтов:
SWIFT
protocol Endpoint {
var baseURL: URL { get }
var path: String { get }
var method: HTTPMethod { get }
var headers: [String: String] { get }
var parameters: [String: Any] { get }
}
  1. Использование в сервисах:
SWIFT
final class UserService {
private let client: NetworkClient
init(client: NetworkClient) {
self.client = client
}
func fetchUsers() async throws -> [User] {
try await client.request(UserEndpoint.list)
}
}

Для управления зависимостями удобно использовать DI-контейнеры (например, Swinject) или простые фабрики. Для кэширования и обработки ошибок - добавить middleware или интерсепторы. Для больших проектов можно рассмотреть готовые решения вроде Alamofire или Moya, но нативная URLSession с async/await покрывает 90% задач.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью