DevPrep

Все темы › Основные понятия программирования

Глобальная переменная

Junior

Суть

Глобальная переменная объявлена на верхнем уровне файла, вне типов и функций, и доступна из любого места модуля (а с public — и из других модулей). Где именно в файле она стоит — не важно.

Как глобальные переменные работают в Swift

import Foundation

// Инициализируется лениво при первом обращении, потокобезопасно
let apiBase = URL(string: "https://api.example.com")!

// Swift 6: `var launchCount = 0` — ошибка: global is not concurrency-safe
@MainActor var launchCount = 0  // доступ только с главного актора
nonisolated(unsafe) var legacyFlag = false     // «за гонки отвечаю сам»

@MainActor func appDidLaunch() { launchCount += 1 }

Почему глобальное состояние считают плохой практикой

Альтернативы: константы static let внутри типа-пространства имён (enum Config { static let apiBase = ... }), dependency injection, @Environment в SwiftUI, actor для общего изменяемого состояния. Синглтон (static let shared) — тот же глобал, но хотя бы с ленивой инициализацией и пространством имён.

На что смотрит интервьюер

Знаете ли вы про ленивую и потокобезопасную инициализацию (частый вопрос «почему static let shared потокобезопасен?») и что Swift 6 делает с глобальными var.

Потренируйтесь перед собеседованием

В DevPrep эти ответы превращаются в задачи на минуту: что напечатает код, найди баг, пробное собеседование. По задаче в день.

Скачать DevPrep в App Store