0Pricing
Swift Academy · レッスン

アクター:共有可変状態の保護

actorを使ってアクセスを直列化し、コンパイル時にデータ競合を防ぎます。

「アクター:共有可変状態の保護」はCoddyKit上の無料Swift Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSwift Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Swift Academyコースには全4レッスンが含まれています。

ようこそ

Swift の Actor は、*アクター分離* を使用して、共有された可変状態を並行アクセスから保護します。手動でロックを管理しなくても、安全な並行処理を実現できます。

Actor の定義

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

Actor の状態へのアクセス

```swift let counter = Counter() await counter.increment() // await required for external access let v = await counter.value() ``` Actor をまたぐすべての呼び出しは非同期です。Actor の実行ターンを待機します。

データの分離

```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` はメインスレッド上で実行される特別な Actor です。

Sendable の要件

Actor の境界を越えて渡す型は、`Sendable` に準拠する必要があります: ```swift struct Message: Sendable { var text: String; var timestamp: Date } await actor.receive(message) // safe — Message is Sendable ```

Actor と Class の比較

| 特徴 | Actor | Class | |---|---|---| | 並行処理の安全性 | ✓ | ✗ | | 参照型 | ✓ | ✓ | | 継承 | ✗ | ✓ | | async アクセス | ✓ | — |

Actor ではデッドロックが発生しない

ロックとは異なり、Actor ではデッドロックは発生しません。ただし、Actor が別の Actor を await している間に2つ目の呼び出しが到着すると、*アクター再入可能性* が発生することがあります。

グローバル Actor

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

クイックチェック

Actor のプロパティに外部からアクセスするとき、`await` を使用する必要があるのはなぜですか?

振り返り

主なポイント: • Actor は可変状態を保護します。1つのタスクだけが一度に実行されます • 外部からのアクセスには `await` が必要です • 分離されていない安全なメンバーには `nonisolated` を使用します • `@MainActor` — メインスレッド上で実行されます。UI に使用します • Actor の境界を越える型は `Sendable` でなければなりません コース完了です。次は Advanced Generics です。

よくある質問

「アクター:共有可変状態の保護」レッスンは無料ですか?

はい。「アクター:共有可変状態の保護」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Swift Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Swift Academyコースには全4レッスンが含まれています。

「アクター:共有可変状態の保護」で何を学びますか?

actorを使ってアクセスを直列化し、コンパイル時にデータ競合を防ぎます。 ブラウザで直接実行するハンズオンコードでSwift Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Swift Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのSwift Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「アクター:共有可変状態の保護」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このSwift Academyレッスンでコードを書いて実行できますか?

はい。すべてのSwift Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. async/await構文と非同期関数の呼び出し
  2. TaskとTaskのキャンセル
  3. async letと並行する子タスク
  4. アクター:共有可変状態の保護
← Swift Academyに戻る