#pragma mark в Swift 2025: Секреты организации кода, о которых молчат

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Введение: Почему ваш код кричит о помощи (и как MARK: его успокаивает)

Представьте: вы открываете файл Swift с 500 строками. Глаза бегают по экрану, вы ищете метод tableView(_:cellForRowAt:), но тонете в пучине func и var. Знакомо? В 2025 году, когда проекты становятся всё сложнее, а скорость разработки критична, такая ситуация — прямой путь к багам и потере времени.

На Stack Overflow вопрос "#pragma mark in Swift?" набрал тысячи просмотров. И неспроста. Разработчики, перешедшие с Objective-C, искали знакомый инструмент, а новички — способ навести порядок в коде. Ответ прост и элегантен: в Swift нет #pragma mark, но есть его более мощный аналог — // MARK:.

В этой статье мы не просто расскажем, как использовать // MARK: в Swift. Мы покажем лучшие практики 2025 года, которые превратят ваш код в произведение искусства, понятное и вам через год, и вашим коллегам. Готовьте Xcode — будет интересно.

Что такое // MARK: в Swift и зачем он нужен?

Если вы когда-либо работали с Objective-C, то помните #pragma mark. Это директива препроцессора, которая помогала группировать методы в панели навигации Xcode. В Swift от неё отказались, но оставили функциональность через специальные комментарии.

// MARK: — это комментарий, который Xcode интерпретирует как разделитель секций. Он добавляет в панель навигации (Jump Bar) жирный заголовок и разделительную линию. Выглядит это так:

// MARK: - Lifecycle

override func viewDidLoad() {
    super.viewDidLoad()
}

// MARK: - Table View Data Source

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return items.count
}

Обратите внимание на дефис после MARK: (// MARK: -). Он добавляет горизонтальную линию-разделитель. Без дефиса будет просто жирный текст. Используйте оба варианта в зависимости от того, насколько сильно хотите визуально отделить блоки.

Ключевые слова для SEO: использование // MARK: в Swift, организация кода Swift, Xcode навигация.

Лучшие практики использования // MARK: в 2025 году

Просто вставить // MARK: везде — плохая идея. Это создаст шум. Вот проверенные техники, которые используют топовые iOS-разработчики.

1. Группируйте по протоколам и обязанностям

Самый частый сценарий — реализация нескольких протоколов в одном классе. Не заставляйте коллег гадать, где заканчивается UITableViewDelegate и начинается UITableViewDataSource.

final class ProfileViewController: UIViewController {

    // MARK: - Properties

    private let viewModel: ProfileViewModel
    private let tableView = UITableView()

    // MARK: - Lifecycle

    override func viewDidLoad() {
        super.viewDidLoad()
        setupUI()
    }

    // MARK: - UITableViewDataSource

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return viewModel.sections.count
    }

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        // ...
    }

    // MARK: - UITableViewDelegate

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        viewModel.didSelectRow(at: indexPath)
    }

    // MARK: - Private Methods

    private func setupUI() {
        // ...
    }
}

Это золотой стандарт. Каждый блок отвечает за одну логическую единицу.

2. Используйте // MARK: - для логических разделов внутри класса

Даже если вы не реализуете протоколы, разбивайте длинные классы на разделы: Public Methods, Private Methods, Helpers, Actions.

// MARK: - Actions

@objc private func didTapSaveButton() {
    // ...
}

// MARK: - Helpers

private func formatCurrency(_ value: Double) -> String {
    // ...
}

3. Добавляйте TODO и FIXME (но аккуратно)

Xcode поддерживает // TODO: и // FIXME:. Они тоже появляются в Jump Bar. В 2025 году это мощный инструмент для командной работы.

// TODO: - Добавить поддержку локализации

// FIXME: - Исправить багу с крашем на iOS 17

Совет: Не злоупотребляйте. Если у вас 50 TODO на файл, проект превращается в свалку. Используйте их для срочных заметок, а не для планирования задач.

4. Следуйте единому стилю в команде

В 2025 году стандарт — это договорённость. Создайте rule в SwiftLint или просто пропишите в Code Style Guide:

  • Всегда используйте // MARK: - с дефисом для основных разделов.
  • Внутри раздела — // MARK: без дефиса для подзаголовков.
  • Пишите названия на английском (это международный стандарт).

Ключевые слова: Swift code organization, Xcode Jump Bar, best practices Swift 2025.

Продвинутые техники: // MARK: в SwiftUI и Combine

С развитием SwiftUI и Combine в 2025 году, организация кода стала ещё важнее. Вот как применять // MARK: в современных проектах.

SwiftUI: Группируем View и ViewModifiers

struct ProfileView: View {

    // MARK: - Properties

    @StateObject private var viewModel: ProfileViewModel
    @State private var isEditing = false

    // MARK: - Body

    var body: some View {
        NavigationView {
            content
        }
    }

    // MARK: - Private Views

    private var content: some View {
        VStack {
            headerView
            listView
        }
    }

    private var headerView: some View {
        // ...
    }

    // MARK: - Actions

    private func didTapEdit() {
        isEditing.toggle()
    }
}

Combine: Секции для Publishers и Subscribers

final class ProfileViewModel: ObservableObject {

    // MARK: - Published Properties

    @Published var userName: String = ""
    @Published var isLoggedIn: Bool = false

    // MARK: - Publishers

    private var cancellables = Set()

    // MARK: - Public Methods

    func login() {
        // ...
    }

    // MARK: - Private Methods

    private func setupBindings() {
        $userName
            .sink { [weak self] name in
                // ...
            }
            .store(in: &cancellables)
    }
}

Это помогает быстро находить логику подписки и не путать её с UI-слоем.

Инструменты для автоматизации // MARK:

Вручную писать // MARK: каждый раз — скучно. В 2025 году есть инструменты, которые делают это за вас.

  • Xcode Snippets: Создайте сниппет для // MARK: - <#Section#>. Вызывается по коротком

Блоги

Рекомендаций по книгам