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