Swift Academy · Pelajaran

Actor dan isolasi data, nonisolated

Pelajari isolasi actor: status dilindungi di balik sebuah actor , akses lintas-actor memerlukan await , dan anggota nonisolated melewati isolasi jika bersifat murni atau statis.

Pelajaran 2 dari 38 langkah

Actor dan isolasi data, nonisolated adalah pelajaran Swift Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 3. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Swift Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Swift Academy mencakup 3 pelajaran total.

Yang disediakan actor

Sebuah actor melindungi status yang dapat diubah. Hanya satu tugas yang menyentuh status terisolasi pada satu waktu; pemanggil eksternal harus menggunakan await pada metodenya.

  • Isolasi = tidak ada perlombaan data
  • Panggilan lintas actor bersifat asinkron
  • nonisolated untuk anggota murni atau statis

Dasar-dasar actor

Di dalam actor, akses dilakukan secara langsung. Dari luar, Anda harus menggunakan await untuk membaca maupun menulis status yang terisolasi.

actor Counter {
    private var value: Int = 0   // isolated state

    func increment() { value += 1 }      // isolated method (async to outsiders)
    func get() -> Int { value }          // read isolated state
}

let c = Counter()
Task {
    await c.increment()
    print(await c.get())  // 1
}

Jaminan serialisasi

Meskipun beberapa tugas melakukan pemanggilan secara bersamaan, actor menserialisasi akses ke statusnya sehingga perlombaan dapat dicegah.

actor BankAccount {
    private var balance: Int = 0
    func deposit(_ amount: Int) { balance += amount }
    func withdraw(_ amount: Int) -> Bool {
        if balance >= amount { balance -= amount; return true }
        return false
    }
    func current() -> Int { balance }
}

let acc = BankAccount()
Task {
    async let a = acc.deposit(50)
    async let b = acc.withdraw(20)
    _ = await (a, b)                 // operations are serialized inside the actor
    print(await acc.current())       // deterministic balance
}

API nonisolated

Tandai anggota yang murni atau statis dengan nonisolated agar pemanggil tidak perlu menggunakan await. Anggota tersebut tidak boleh mengakses status terisolasi.

actor Clock {
    private var ticks: Int = 0
    func tick() { ticks += 1 }
    func read() -> Int { ticks }

    // Nonisolated: safe without awaiting (pure computation / constant)
    nonisolated static let format = "HH:mm:ss"

    nonisolated func describeFormat() -> String {
        // Cannot touch isolated state here; this is pure
        return "Format: " + Self.format
    }
}

let cl = Clock()
Task {
    await cl.tick()
    print(await cl.read())           // 1
    // Nonisolated members don't require await:
    print(Clock.format)              // "HH:mm:ss"
    print(cl.describeFormat())       // sync call
}

Memahami reentransi

Actor dapat bersifat reentrant: setelah await di dalam metode actor, pesan lain dapat berjalan. Pastikan invarian tetap valid di antara titik await.

actor Logger {
    private var lines: [String] = []
    func log(_ s: String) async {
        lines.append(s)
        // Simulate an await point; actor may process other messages here (reentrant)
        try? await Task.sleep(nanoseconds: 10_000_000)
        lines.append("done")
    }
    func snapshot() -> [String] { lines }
}

let logger = Logger()
Task {
    async let a = logger.log("A")
    async let b = logger.log("B")
    _ = await (a, b)
    print(await logger.snapshot())   // order shows possible interleaving
}

Praktik terbaik

Panduan:

  • Tampilkan metode asinkron yang kecil; hindari bagian kritis yang panjang.
  • Gunakan nonisolated untuk konstanta atau pembantu murni.
  • Jangan menyimpan status bersama yang dapat diubah dan bukan Sendable di luar actor; Anda akan mempelajari Sendable berikutnya.

Persyaratan isolasi actor

Pemeriksaan singkat: Bagaimana Anda membaca atau menulis status actor dari luar?

Ringkasan

Ringkasan: Actor mengisolasi status yang dapat diubah; akses eksternal memerlukan await. Gunakan nonisolated untuk anggota murni atau statis, dan rancang metode asinkron yang singkat agar reentransi tetap aman.

Gratis untuk memulai

Belajar Swift dengan tutor AI — gratis

Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.

Kursus
122
Pelajaran
409

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Actor dan isolasi data, nonisolated” gratis?

Ya — teks lengkap “Actor dan isolasi data, nonisolated” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Swift Academy, upgrade ke CoddyKit PRO. Kursus Swift Academy mencakup 3 pelajaran total.

Apa yang akan aku pelajari di “Actor dan isolasi data, nonisolated”?

Pelajari isolasi actor: status dilindungi di balik sebuah actor , akses lintas-actor memerlukan await , dan anggota nonisolated melewati isolasi jika bersifat murni atau statis. Kamu berlatih Swift Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Swift Academy?

Tidak diperlukan pengalaman sebelumnya. Swift Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 3.

Berapa lama pelajaran “Actor dan isolasi data, nonisolated” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Swift Academy ini?

Ya. Setiap pelajaran Swift Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. TaskGroup untuk paralelisme
  2. Actor dan isolasi data, nonisolated
  3. Sendable dan pemeriksaan keamanan thread
← Kembali ke Swift Academy