Belajar menggunakan Core Data di Swift 5
Cara menyimpan data pada penyimpanan lokal dengan menggunakan framework Core Data milik Apple
Dalam mengembangkan sebuah perangkat lunak atau aplikasi, developer selalu dihadapkan oleh data informasi. Pada web server, kita mengenal database dengan bahasa SQL, baik memiliki relational maupun tidak. Sedangkan pada mobile, banyak orang mengenal SQLite. Namun, ada juga opsi lain seperti Shared Preferences di Android dan User Defaults di iOS.
Kali ini, saya akan memperkenalkan tempat penyimpanan atau database milik iOS, namanya Core Data. Core Data merupakan sebuah objek graf dan persistence framework milik Apple. Core Data memiliki sifat yang mirip dengan relational database yang dimana memiliki entity, attribute dan relationship. Dalam proyek MVC, Core Data akan berguna sebagai data model sehingga tidak perlu lagi kita membuat data struct sebagai model baru.
Core Data yang berjalan menggunakan sistem multi-thread environment yang artinya akan bergerak pada background task tanpa mengganggu thread utama yang biasa digunakan untuk memuat tampilan. Core Data akan menggunakan sistem background task tersebut setiap kali melakukan proses create, update, delete, dan read. Namun, dikarenakan proses dilakukan terhadap penyimpanan lokal, proses dilakukan dengan sangat cepat.
A. Setup environment — New Project
Pada contoh kali ini, saya akan menggunakan proyek baru. Ketika membuatnya, perhatikan pengaturan proyek seperti gambar di bawah. Karena kita akan menggunakan Core Data, pastikan “Use Core Data” tercentang.
Setelah proyek berhasil dibuat, kita akan menemukan sebuah file yang agak asing, yaitu file dengan extension .xcdatamodel
. File ini berfungsi untuk menyimpan semua data entity yang akan digunakan sebagai data model.
B. Setup Environment — Existing Project
Apabila kamu ingin langsung mengimplementasikan core data pada proyek lamamu yang tidak memiliki core data sebelumnya, tidak perlu khawatir. Kalian tidak perlu membuat proyek baru untuk memasangnya. Cara memasangnya cukup mudah. Kalian hanya perlu membuat file baru dengan tipe file “data model” (lihat gambar). Setelah memberi nama, kamu akan menemukan file .xcdatamodel
dalam proyekmu.
C. Membuat entity dan attribute
Setelah memiliki file data model, mari kita membuat entity sesuai kebutuhan. Untuk membuat entity, kalian bisa klik tombol “Add Entity” di bagian bawah editor. Lalu, kalian bisa memberi nama sesuai dengan yang diinginkan.
Pada contoh kali ini, saya ingin membuat data list binatang. Maka dari itu, saya akan membuat entity dengan nama Animal
.
Selanjutnya, kita akan membuat attribute. Attribute lebih dikenal dengan “nama kolom” kalau kalian sudah pernah mengenal SQL. Attribute memiliki pengaturan wajib yaitu nama dan tipe data. Lalu ada juga pengaturan untuk data default, optional, atau validation, namun hal ini tidak wajib.
Tipe data yang bisa kita gunakan ada bermacam-macam, yaitu
- Integer 16, 32, 64 : Untuk penyimpanan bilangan bulat. Angka di belakangnya berarti jumlah bit yang digunakan untuk penyimpanan. Semakin besar bitnya, semakin besar pula tempat yang disiapkan untuk menyimpan.
- Decimal, Double, Float : Untuk penyimpanan bilangan desimal. Double menggunakan 64 bit dan float menggunakan 32 bit. Ketika mencapai batas maksimalnya, kedua tipe ini akan membulatkan datanya. Sedangkan desimal mampu menyimpan bilangan desimal tanpa pembulatan.
- String : Untuk penyimpanan data teks.
- Boolean : Untuk penyimpanan data YES atau NO.
- Date : Untuk penyimpanan tanggal atau timestamps.
- Binary Data : Untuk penyimpanan data biner.
- UUID : Untuk menyimpan data pada identifier atau id.
- URI : Untuk menyimpan URL atau alamat website
- Transformable : Bisa untuk menyimpan apapun, tergantung pada class yang dipasang kepadanya. Contoh: UIImage, UIColor, [String].
Pada contoh ini, kita akan menggunakan 3 data saja, yaitu name
sebagai String, legs
sebagai Integer 16, dan fly
sebagai Boolean.
Setelah entity dan attribute dibuat, selanjutnya kita akan membahas bagaimana cara membuat 4 basic function atau biasa dikenal sebagai CRUD, yang terdiri dari Create, Read, Update, Delete.
D. Setting Up Code for Core Data
Karena Core Data dapat mengubah entity sebagai data model, maka kamu tidak perlu lagi membuat struct untuk memasukkan data. Sebelum memulai kita harus melakukan import Core Data di bagian atas file. Gunakan import ini pada setiap file yang akan berhubungan dengan core data.
import CoreData
Selanjutnya, kita harus membuat variabel context
, yang dimana merupakan situasi pada background task. Seperti yang telah dijelaskan sebelumnya, Core Data berjalan pada background task supaya tidak mengganggu main thread. Jadikan variabel context
ini sebagai global variabel supaya kamu tidak perlu membuat variabel ini berulang kali.
let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
Lalu, kita akan membuat fungsi untuk melakukan penyimpanan ke Core Data. Pembuatan method ini bersifat optional, namun karena kita akan menggunakannya berulang kali, saya akan simpan ke dalam method saja.
Tanpa menggunakan method ini, data model yang ada akan menjadi struct biasa. Data yang terkandung di dalamnya tidak akan disimpan ke dalam Core Data.
E. Create
Ketika kita ingin memasukkan data ke dalam struct, biasanya kita akan menginisialisasikannya ke dalam variabel lalu kita masukkan semua datanya. Dalam memasukkan data ke dalam Core Data, proses yang dilakukan sama saja. Perbedaannya terletak pada jumlah baris kodingannya. Di sini aku memberikan contoh data “name : Anjing, legs : 4, fly : false”
Fungsi di atas hanyalah contoh. Jika kalian ingin memasukkan banyak data, silahkan memodifikasi sendiri kodingan yang diperlukan. Jangan lupa untuk memanggil method saveData()
sebelum menginisialisasi variabel baru untuk disimpan.
F. Read
Dalam mengambil data, pengembalian data selalu berupa array of object (entity). Kalau pada SQL, kamu akan mengenal
SELECT * FROM animal
Kodingan SQL di atas akan mengembalikan data list atau array. Pada Core Data, hal ini berlaku sama. Pemanggilannya bukan menggunakan SELECT namun menggunakan NSFetchRequest
.
Pemanggilan dilakukan di dalam try-catch untuk mencegah terjadinya error akibat kesalahan request.
Request di sini menjadi peran penting dalam mengambil data. Apabila kita ingin mengambil data spesifik, kalian bisa menggunakan NSPredicate. Cara menggunakannya:
//untuk 1 aturan
let predicate = NSPredicate(format: "name MATCHES %@", "bebek")
request.predicate = predicate//untuk lebih dari 1 aturan
let predicate = NSPredicate(format: "name MATCHES %@", "bebek")
let predicate2 = NSPredicate(format: "legs == 2")
request.predicate = NSCompoundPredicate(andPredicateWithSubpredicates: [predicate, predicate2])
Apabila ingin menlakukan sort, kalian bisa menggunakan NSSortDescriptor. Cara menggunakannya:
//untuk 1 aturan
let sort = NSSortDescriptor(key: "name", ascending: true)
request.sortDescriptors = [sort]//untuk lebih dari 1 aturan
let sort = NSSortDescriptor(key: "name", ascending: true)
let sort2 = NSSortDescriptor(key: "legs", ascending: false)
request.sortDescriptors = [sort, sort2]
Pemasangan aturan ini dilakukan setelah penginisialisasian variabel request dan sebelum melakukan fetch. Untuk info lebih lanjut tentang NSPredicate, klik di sini. Sedangkan, untuk NSSortDescriptor, klik di sini.
G. Update
Setelah belajar create dan read, mari kita belajar cara mengubah data yang telah disimpan. Sistem update sedikit berbeda dengan create karena menggunakan sebuah method yang bernama setValue()
.
animal.setValue(value, forKey: key)
animal
di atas merupakan data sebuah animal yang sudah dipilih menggunakan NSPredicate. value
merupakan data baru, sedangkan key
merupakan nama attribute yang akan diubah.
Function getAnimal()
di atas berfungsi untuk mengambil data animal dengan nama yang telah ditentukan. Kalian bisa melihat contoh penggunaan NSPredicate seperti yang sudah dijelaskan sebelumnya. Lalu fungsi update()
menjelaskan bagaimana cara melakukan update.
H. Delete
Terakhir, bagaimana cara membuang data? Cara membuang data adalah yang termudah. Hanya dengan memanggil fungsi delete.
context.delete(animal)
animal
di atas merupakan data sebuah animal yang sudah dipilih seperti bagian update. Cara menggunakannya:
Cukup mudah bukan?
Kesimpulan
Begitulah cara menggunakan Core Data di dalam project Swift. Dengan menggunakan framework yang disediakan oleh Apple, kita tidak perlu lagi menggunakan external library yang mampu memberatkan sebuah proyek aplikasi. Menurutku, Core Data ini sudah cukup powerful untuk dijadikan sebagai data model dan database dalam penyimpanan lokal.
Sebagai pengingat saja, jangan lupa untuk memanggil function saveData()
untuk melakukan perubahan dalam Core Data. Sering-seringlah membuka Apple Documentation.
Selamat mencoba dan semoga berhasil… Semangat…