Pernahkah kamu bertanya-tanya bagaimana aplikasi di ponselmu bisa menyimpan dan mengakses data, seperti catatan, preferensi pengguna, atau informasi penting lainnya? Ada berbagai cara yang biasa digunakan oleh pengembang aplikasi, terutama dalam pengembangan aplikasi iOS, seperti User Default, Core Data, File System, SQLite, Keychain, Firebase Database, atau bahkan Realm. Semua cara tersebut bisa dikatakan dengan data persistence.
Namun, tahukah kamu bahwa pada WWDC 2023 lalu, Apple mengumumkan data persistence terbarunya? Jawabannya adalah SwiftData, data persistence baru yang didesain agar lebih mudah ditulis secara deklaratif dengan SwiftUI. Wah, menarik, bukan? Yuk, kita bahas lebih detailnya.
💻 Mulai Belajar Pemrograman
Belajar pemrograman di Dicoding Academy dan mulai perjalanan Anda sebagai developer profesional.
Daftar SekarangData Persistence
Sebelum membahas apa itu SwiftData, apakah kamu sudah familier dengan istilah data persistence? Istilah ini diambil sebagai gambaran ketika aplikasi memiliki kemampuan untuk menyimpan data sehingga ia dapat diambil dan digunakan kemudian, meski aplikasi dibuka atau ditutup. Oleh karena itu, data persistence memastikan data tetap utuh dan bisa digunakan di kemudian waktu.
Lalu, sebenarnya apa perbedaan dari masing-masing data persistence yang ada dalam pengembangan aplikasi iOS? Mari kita bahas terlebih dahulu, ya, perbedaannya.
- User Defaults: Untuk menyimpan data sederhana seperti pengaturan aplikasi dalam bentuk key-value pairs. Terbatas pada tipe data kecil dan sederhana.
- Core Data: Framework yang digunakan untuk mengelola data kompleks dan memiliki fitur object graph management serta data persistence. Cocok untuk aplikasi dengan struktur data yang rumit.
- File System: Menyimpan data secara manual dalam bentuk file (misalnya, JSON, plist, gambar) dalam direktori aplikasi. Fleksibel, tetapi tidak otomatis mengelola data seperti Core Data.
- SQLite: Database relasional ringan yang memungkinkan kueri SQL. Cocok untuk aplikasi yang memerlukan kontrol penuh atas struktur database dan relasi antar data.
- Keychain: Untuk menyimpan data yang sensitif, seperti kata sandi dan token autentikasi dengan keamanan tinggi. Data disimpan secara terenkripsi.
- Firebase Database: Solusi real-time database berbasis cloud yang cocok untuk aplikasi dengan kebutuhan sinkronisasi data antar perangkat atau pengguna secara langsung.
- Realm: Database mobile dengan performa tinggi dan mudah digunakan, mirip dengan Core Data, tetapi lebih sederhana dan cepat dalam hal kueri serta manajemen data.
Ternyata, banyak metode yang bisa kamu gunakan untuk mengimplementasikan data persistence dalam aplikasi iOS. Tentunya, masing-masing di antaranya memiliki kelebihan dan kekurangan. Kamu bisa menggunakannya sesuai dengan kebutuhan dan kondisi yang ditemui.
Contohnya, ketika kamu ingin menyimpan informasi yang sensitif, Keychain bisa jadi rekomendasi. Contoh lainnya ketika kamu ingin datamu juga bisa diakses sistem operasi lain, Firebase Database bisa dipilih.
Core Data sebagai Data Persistence Bawaan Xcode
Perlu kamu tahu juga bahwa mengimplementasikan berbagai metode data persistence mudah dilakukan, terutama dalam pengembangan aplikasi berbasis UIKit. Biasanya kamu hanya perlu membuat sebuah class terpisah untuk mengatur mekanisme data disimpan sehingga bisa digunakan kembali. Contohnya dalam Core Data sebagai data persistence bawaan dalam Xcode.
Sepertinya cukup mudah untuk mengimplementasikan sebuah Core Data dalam aplikasi UIKit. Namun, perlu kamu tahu dulu bahwa setiap data persistence punya cara implementasinya sendiri. Contohnya adalah Core Data memiliki Core Data Stack yang berisi kumpulan objek framework sebagai bagian dari inisialisasi Core Data.
Kamu perlu memanfaatkan beberapa framework pendukung tersebut agar Core Data dapat berfungsi dengan optimal. Kompleksitasnya meningkat karena Core Data didesain dengan paradigma imperative programming.
Terlebih ketika menggunakan SwiftUI, kamu harus menyesuaikan beberapa bagian kode agar terintegrasi dengan SwiftUI, yang berbasis declarative programming, berjalan dengan baik. Alhasil, banyak kendala yang akan kamu alami ketika menggunakan Core Data dalam dalam aplikasi SwiftUI. Bahkan, tak banyak developer yang beralih dari Core Data ke data persistence lain, seperti Realm. Oleh karena itu, Apple mengumumkan data persistence yang cocok untuk SwiftUI, yakni SwiftData.
SwiftData sebagai Data Persistence Terbaru Apple!
Setelah para developer Apple struggle dengan implementasi Core Data di SwiftUI, Apple mengumumkan SwiftData pada WWDC 2023. SwiftData adalah data persistence yang memudahkan Anda dalam pengembangan aplikasi iOS, terutama SwiftUI karena ia menggunakan kode deklaratif. Anda bisa melakukan query dan filtering menggunakan kode Swift dan bisa dengan mudah mengintegrasikannya dengan SwiftUI.
Berikut adalah fitur-fitur dari SwiftData.
Model dengan Swift
Kamu bisa mengubah model Swift menjadi model dalam SwiftData. Caranya dengan menambahkan @Model di awal penulisan kelas model tersebut. Simpel, bukan?
1 2 3 4 5 6 |
@Model class Recipe { @Attribute(.unique) var name: String var summary: String? var ingredients: [Ingredient] } |
Persistensi Otomatis
Ketika kamu menggunakan SwiftData, aplikasi akan mengambil object dari database ketika dibutuhkan dan menyimpannya secara otomatis tanpa perlu framework tambahan.
Kustomisasi Data Store
Dengan protocol DataStore, SwiftData dapat digunakan dengan berbagai jenis data persistence, contohnya file JSON, tanpa mengubah kode pemodelan SwiftUI dan SwiftData.
Integrasi dengan SwiftUI
Kamu bisa menggunakan @Query dalam tampilan SwiftUI untuk mengambil data dari SwiftData. SwiftData dan SwiftUI dapat bekerja sama untuk memberikan update secara langsung ke View ketika ada perubahan data, tanpa perlu memuat ulang data secara manual.
1 2 3 4 5 6 |
@Query var recipes: [Recipe] var body: some View { List(recipes) { recipe in NavigationLink(recipe.name, destination: RecipeView(recipe)) } } |
Sinkronisasi CloudKit
SwiftData mendukung proses penyimpanan data dalam bentuk file menggunakan DocumentGroup dan disinkronkan melalui iCloud Drive, atau menggunakan CloudKit untuk menyinkronkan data antar perangkat.
Kompatibilitas dengan Core Data
Kamu bisa menggunakan Core Data dengan SwiftData secara bersamaan. Hal ini karena SwiftData menggunakan arsitektur penyimpanan yang sama dengan Core Data. Bahkan, Xcode dapat mengonversi model Core Data menjadi kelas untuk digunakan dengan SwiftData. Menarik, bukan?
Membangun Aplikasi Sederhana dengan SwiftData
Setelah berkenalan dengan SwiftData, tentu tidak lengkap rasanya untuk membangun aplikasi iOS dengan SwiftData. Oleh karena itu, mari kita coba membangun aplikasi sederhana yang memanfaatkan SwiftData sebagai data persistence.
- Pertama, kamu bisa gunakan Xcode atau Swift Playgrounds untuk membangun aplikasi iOS.
- Kemudian, tulis nama aplikasi dan sesuaikan Organization Identifier dengan keinginan kalian. Klik next untuk melanjutkan.
- Setelah itu, buat model data yang akan disimpan sebagai Entity dalam SwiftData.
12345678910@Modelclass Book {var title: Stringvar author: Stringinit(title: String, author: String) {self.title = titleself.author = author}} - Setelah itu, kita bisa bangun sebuah function untuk menambahkan dan menghapus data dalam ContentView.
123456789101112131415161718192021222324252627struct ContentView: View {@Environment(\.modelContext) private var context@State private var title = ""@State private var author = ""// Menampilkan Data@Query var books: [Book]var body: some View {...}// Menambahkan Dataprivate func addBook() {let newBook = Book(title: title, author: author)context.insert(newBook)title = ""author = ""}// Menghapus Dataprivate func deleteBook(at offsets: IndexSet) {for index in offsets {let book = books[index]context.delete(book)}}} - Lanjut, kita desain tampilan aplikasi untuk menampilkan daftar buku dan form untuk tambah buku dengan menggunakan SwiftUI.
1234567891011121314151617181920212223242526272829303132333435struct ContentView: View {...var body: some View {NavigationView {VStack {Form {Section(header: Text("Add a New Book")) {TextField("Title", text: $title)TextField("Author", text: $author)Button(action: addBook) {Text("Add Book")}}}List {ForEach(books) { book inVStack(alignment: .leading) {Text(book.title).font(.headline)Text(book.author).font(.subheadline)}}.onDelete(perform: deleteBook)}}.navigationTitle("MyBooks")}}...}#Preview {ContentView().modelContainer(for: Book.self)} - Setelah itu, kamu bisa sesuaikan bagian MyApp.
123456789@mainstruct MyApp: App {var body: some Scene {WindowGroup {ContentView().modelContainer(for: Book.self)}}} - Hasilnya seperti ini.
Mantap, bukan? Dengan SwiftData, penulisan kode menjadi lebih simpel dan ringkas. Kamu juga lebih mudah mengimplementasikan SwiftData dengan SwiftUI karena fitur integrasinya. Kamu bisa membangun aplikasi dengan alur data yang lebih jelas dan meminimalkan boilerplate code yang biasa ditemui dalam metode data persistence lainnya.
Kamu bisa mengunduh kode dari hal yang sudah kita praktikkan pada tautan berikut.
Kesimpulan
SwiftData hadir sebagai solusi modern yang mempermudah proses penyimpanan data dalam pengembangan aplikasi iOS. Dibandingkan dengan metode data persistence sebelumnya, SwiftData menawarkan pendekatan yang lebih sederhana dan efisien, terutama untuk aplikasi yang menggunakan SwiftUI.
Dengan dukungan integrasi otomatis, kustomisasi, serta kompatibilitas dengan Core Data, SwiftData memungkinkanmu untuk membangun aplikasi yang lebih robust melalui cara lebih mudah dan deklaratif.
Jika kamu ingin mulai belajar iOS, telah hadir langganan Learning Path baru, iOS Developer di Tokopedia Dicoding. Mulai belajar terarah dengan Learning Path. Kunjungi dicoding.id/iOS. |
Mulailah petualangan membangun aplikasi iOS hari ini! Sekian blog kali ini, sampai jumpa bertemu di blog lainnya! Terima kasih.