Section 8/131 menit
8. @preconcurrency
8. @preconcurrency
Teori: Library Lama Belum Adopt Sendable
Banyak library populer (Firebase, Realm, Alamofire versi lama) belum menandai tipe mereka
sebagai Sendable. Saat kamu menggunakannya di kode async, compiler memunculkan warning.
@preconcurrency import
swift
// Suppress semua warning Sendable dari module ini
@preconcurrency import RealmSwift
@preconcurrency import FirebaseFirestore
// Sekarang bisa gunakan tipe dari library tanpa warning
actor DataRepository {
func fetchFromFirestore() async throws -> [QueryDocumentSnapshot] {
// QueryDocumentSnapshot bukan Sendable, tapi warning di-suppress
let snapshot = try await db.collection("users").getDocuments()
return snapshot.documents
}
}
@preconcurrency pada Protocol Conformance
swift
// Protocol dari library lama yang belum adopt Sendable
@preconcurrency
protocol LegacyDataSource: AnyObject {
func fetchData(completion: @escaping ([String]) -> Void)
}
// Implementasi tanpa warning
class ModernDataSource: LegacyDataSource, @preconcurrency Sendable {
func fetchData(completion: @escaping ([String]) -> Void) {
Task {
let data = await loadAsync()
completion(data)
}
}
}
Catatan:
@preconcurrencybersifat sementara — idealnya dihapus setelah library bersangkutan sudah update dan conformSendabledengan benar.