0Pricing
Swift Academy · Урок

Изменение, совместное использование и неожиданное псевдонимирование

Разберитесь, как общие ссылки вызывают ошибки и как типы-значения предотвращают их.

«Изменение, совместное использование и неожиданное псевдонимирование» — бесплатный урок Swift Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Swift Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Swift Academy содержит 4 уроков всего.

Добро пожаловать

Псевдонимирование возникает, когда две переменные ссылаются на один и тот же объект. Для типов-значений это невозможно; для ссылочных типов оно приводит к неожиданным ошибкам. Понимание этого различия крайне важно.

У типов-значений нет псевдонимирования

```swift var a = [1,2,3] var b = a // independent copy a.append(4) print(b) // [1,2,3] — unchanged ``` Каждое присваивание типа-значения создаёт независимую копию.

Ссылочные типы DO используют псевдонимирование

```swift class Counter { var value = 0 } let a = Counter() let b = a // SAME object a.value += 1 print(b.value) // 1 — b sees the change! ``` И `a`, и `b` указывают на один и тот же объект в куче.

Псевдонимирование в параметрах функций

```swift func increment(_ c: Counter) { c.value += 1 } let shared = Counter() increment(shared) print(shared.value) // 1 — mutated by the function ``` Классы передаются по ссылке — функция изменяет исходный объект.

Проблема: общее изменяемое состояние

```swift class Cache { var items: [String] = [] } var cache = Cache() var cache2 = cache // aliased! cache.items.append("data") print(cache2.items) // ["data"] — unexpected! ``` Так части кода, которые кажутся не связанными друг с другом, влияют друг на друга.

Решение с помощью типов-значений

```swift struct Cache { var items: [String] = [] } var cache = Cache() var cache2 = cache // independent copy cache.items.append("data") print(cache2.items) // [] — unaffected ```

Решение с помощью копирования классов

```swift func process(_ c: Counter) { var local = Counter() local.value = c.value // copy values, not reference local.value += 1 } ``` Когда Вам нужна семантика ссылок, но не псевдонимирование, явно копируйте значения.

Потокобезопасность и псевдонимирование

Совместное использование ссылок становится особенно опасным при работе в разных потоках: ```swift // Thread 1: cache.items.append("a") // Thread 2 simultaneously: cache.items.append("b") // ❌ data race! ``` Типы-значения в Swift Concurrency по умолчанию предотвращают это — изменяемое состояние могут совместно использовать только акторы.

Обнаружение случайного совместного использования ссылок

Санитайзер потоков Xcode обнаруживает состояния гонки во время выполнения. Включите его в разделе Scheme > Diagnostics > Thread Sanitizer. Проверка эксклюзивности Swift во время выполнения выявляет нарушения совместного использования ссылок в однопоточном коде для параметров `inout`.

Преднамеренное совместное использование ссылок

Иногда совместное использование ссылок бывает преднамеренным — например, для глобального кэша: ```swift class AppCache { static let shared = AppCache() // intentional shared reference var data: [String: Any] = [:] } ``` Чётко документируйте преднамеренное совместное использование; по умолчанию избегайте случайного совместного использования ссылок, выбирая типы-значения.

Быстрая проверка

Что происходит, когда Вы присваиваете экземпляр класса новой переменной?

Итоги

Главное: • Типы-значения (`struct`) — при присваивании копируются; совместное использование ссылок невозможно • Ссылочные типы (`class`) — при присваивании совместно используют ссылку; совместное использование возможно • Совместное использование ссылок между потоками = состояние гонки • По умолчанию выбирайте структуры; используйте классы только при необходимости общей идентичности • Используйте санитайзер потоков и проверку эксклюзивности Swift для обнаружения проблем Далее: смешанные графы значений и ссылок.

Часто задаваемые вопросы

Урок «Изменение, совместное использование и неожиданное псевдонимирование» бесплатный?

Да — полный текст урока «Изменение, совместное использование и неожиданное псевдонимирование» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Swift Academy, подпишись на CoddyKit PRO. Курс Swift Academy содержит 4 уроков всего.

Чему я научусь в уроке «Изменение, совместное использование и неожиданное псевдонимирование»?

Разберитесь, как общие ссылки вызывают ошибки и как типы-значения предотвращают их. Ты практикуешь Swift Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Swift Academy?

Предыдущий опыт не требуется. Swift Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «Изменение, совместное использование и неожиданное псевдонимирование»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Swift Academy?

Да. Каждый урок Swift Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Стек и куча: где хранятся значения
  2. Изменение, совместное использование и неожиданное псевдонимирование
  3. Смешанные графы значений и ссылок
  4. Проектирование интерфейсов с семантикой значений
← Назад к Swift Academy