Section 11/201 menit

11. Global Actor Isolation — Default Lebih Ketat

11. Global Actor Isolation — Default Lebih Ketat

Teori: Perubahan Default Inference di Swift 6

Di Swift 5, jika sebuah fungsi dipanggil dari @MainActor context, compiler tidak otomatis meng-infer bahwa fungsi tersebut harus berjalan di main actor. Di Swift 6, inference ini lebih ketat dan eksplisit.

Perubahan utama:

swift
// Swift 5: actor isolation sering di-infer secara implisit dan tersembunyi
class MyVC: UIViewController {
    func setup() {
        // Swift 5: mungkin di-infer sebagai @MainActor karena UIViewController
        // Swift 6: harus eksplisit atau ada error
        doAsyncWork()
    }

    func doAsyncWork() {
        Task {
            await someActorMethod()  // isolation tidak jelas
        }
    }
}

// Swift 6: harus eksplisit
@MainActor
class MyVC: UIViewController {
    func setup() {  // jelas: @MainActor
        Task {
            await someActorMethod()  // jelas: hop dari @MainActor ke actor
        }
    }
}

Global Actor pada Stored Property

swift
// Swift 6: global actor bisa di-apply ke stored property individual
class AppConfiguration {
    @MainActor var theme: AppTheme = .default     // hanya di main thread
    @MainActor var fontSize: CGFloat = 16          // hanya di main thread

    // Non-isolated: bisa diakses dari mana saja
    let version: String = "1.0"
    let buildNumber: Int = 42
}

// Penggunaan:
let config = AppConfiguration()
await MainActor.run { config.theme = .dark }  // harus await
print(config.version)  // tidak perlu await — nonisolated

SWIFT 6.1 — REFINEMENTS (2025)