Section 6/171 menit

6. Global Actor Kustom: Membuat Isolation Domain Sendiri

6. Global Actor Kustom: Membuat Isolation Domain Sendiri

Kamu bisa membuat global actor sendiri untuk men-serialize akses ke shared resource lintas tipe.

Membuat Global Actor

swift
@globalActor
actor DatabaseActor {
    static let shared = DatabaseActor()
}

@DatabaseActor
final class UserRepository {
    func fetchAll() -> [User] { /* ... */ }
}

@DatabaseActor
final class OrderRepository {
    func fetchAll() -> [Order] { /* ... */ }
}

Semua method di UserRepository dan OrderRepository sekarang dijalankan di executor DatabaseActor.shared — secara serial, lintas dua class. Cocok untuk: pool koneksi database, file I/O, hardware bus.

Custom Executor di Global Actor

swift
@globalActor
actor RenderActor {
    static let shared = RenderActor()

    let queue = DispatchSerialQueue(label: "render", qos: .userInteractive)

    nonisolated var unownedExecutor: UnownedSerialExecutor {
        queue.asUnownedSerialExecutor()
    }
}

Sekarang semua kode @RenderActor jalan di queue priority tinggi.

Kapan Lebih Cocok dari Actor Instance

Pertanyaan Jawaban "Ya" → Global Actor
Apakah resource ini singleton secara semantik? Ya
Apakah banyak class perlu berbagi domain ini? Ya
Apakah lifetime resource = lifetime app? Ya
Apakah kamu butuh per-instance state independen? Tidak — gunakan actor instance