0Pricing
Swift Academy · Урок

Акторы: защита общего изменяемого состояния

Используйте actor для последовательного доступа и предотвращения состояний гонки во время компиляции.

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

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

Акторы Swift защищают общее изменяемое состояние от параллельного доступа с помощью *изоляции акторов*. Они обеспечивают безопасную конкурентность без ручных блокировок.

Определение актора

```swift actor Counter { var count = 0 func increment() { count += 1 } func value() -> Int { count } } ```

Доступ к состоянию актора

```swift let counter = Counter() await counter.increment() // await required for external access let v = await counter.value() ``` Все вызовы между акторами являются асинхронными: они ожидают очереди выполнения актора.

Изоляция данных

```swift actor BankAccount { private var balance: Double = 0 func deposit(_ amount: Double) { balance += amount } func withdraw(_ amount: Double) throws { guard amount <= balance else { throw BankError.insufficient } balance -= amount } } ```

nonisolated

```swift actor Config { nonisolated let appName: String = "CoddyKit" // safe to access without await var settings: [String:String] = [:] } let name = Config().appName // no await needed ```

@MainActor

```swift @MainActor class ViewController { var label = UILabel() func updateText(_ text: String) { label.text = text // guaranteed on main thread } } ``` `@MainActor` — специальный актор, выполняющийся в главном потоке.

Требование Sendable

Типы, передаваемые через границы акторов, должны соответствовать `Sendable`: ```swift struct Message: Sendable { var text: String; var timestamp: Date } await actor.receive(message) // safe — Message is Sendable ```

Актор и класс

| Возможность | Актор | Класс | |---|---|---| | Безопасность при конкурентном доступе | ✓ | ✗ | | Ссылочный тип | ✓ | ✓ | | Наследование | ✗ | ✓ | | Асинхронный доступ | ✓ | — |

Акторы не допускают взаимной блокировки

В отличие от блокировок, акторы не могут допустить взаимную блокировку, но могут вызвать *повторный вход в актор*, когда один актор ожидает другой, а между этими событиями поступает второй вызов.

Глобальные акторы

```swift @globalActor struct DatabaseActor { static let shared = Actor() actor Actor {} } @DatabaseActor func save() { ... } ```

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

Почему при внешнем доступе к свойствам актора необходимо использовать `await`?

Повторение

Основные выводы: • Акторы защищают изменяемое состояние — за один раз выполняется одна задача • Для внешнего доступа требуется `await` • `nonisolated` используется для безопасных членов, не изолированных от актора • `@MainActor` — выполняется в главном потоке; используется для пользовательского интерфейса • Типы, пересекающие границы акторов, должны быть `Sendable` Курс завершён! Далее: продвинутые обобщения.

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

Урок «Акторы: защита общего изменяемого состояния» бесплатный?

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

Чему я научусь в уроке «Акторы: защита общего изменяемого состояния»?

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

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

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

Сколько времени занимает урок «Акторы: защита общего изменяемого состояния»?

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

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

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

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

  1. Синтаксис async/await и вызов асинхронных функций
  2. Task и отмена Task
  3. async let и параллельные дочерние задачи
  4. Акторы: защита общего изменяемого состояния
← Назад к Swift Academy