Swift 5+
Tidak ada jawaban yang benar-benar membahas secara terperinci standar bawaan pada kemampuan penyimpanan lokal. Itu bisa melakukan jauh lebih dari sekadar string.
Anda memiliki opsi berikut langsung dari dokumentasi apple untuk mendapatkan data dari default.
func object(forKey: String) -> Any?
//Returns the object associated with the specified key.
func url(forKey: String) -> URL?
//Returns the URL associated with the specified key.
func array(forKey: String) -> [Any]?
//Returns the array associated with the specified key.
func dictionary(forKey: String) -> [String : Any]?
//Returns the dictionary object associated with the specified key.
func string(forKey: String) -> String?
//Returns the string associated with the specified key.
func stringArray(forKey: String) -> [String]?
//Returns the array of strings associated with the specified key.
func data(forKey: String) -> Data?
//Returns the data object associated with the specified key.
func bool(forKey: String) -> Bool
//Returns the Boolean value associated with the specified key.
func integer(forKey: String) -> Int
//Returns the integer value associated with the specified key.
func float(forKey: String) -> Float
//Returns the float value associated with the specified key.
func double(forKey: String) -> Double
//Returns the double value associated with the specified key.
func dictionaryRepresentation() -> [String : Any]
//Returns a dictionary that contains a union of all key-value pairs in the domains in the search list.
Berikut adalah opsi untuk 'pengaturan'
func set(Any?, forKey: String)
//Sets the value of the specified default key.
func set(Float, forKey: String)
//Sets the value of the specified default key to the specified float value.
func set(Double, forKey: String)
//Sets the value of the specified default key to the double value.
func set(Int, forKey: String)
//Sets the value of the specified default key to the specified integer value.
func set(Bool, forKey: String)
//Sets the value of the specified default key to the specified Boolean value.
func set(URL?, forKey: String)
//Sets the value of the specified default key to the specified URL.
Jika menyimpan hal-hal seperti preferensi dan bukan kumpulan data besar ini adalah opsi yang sangat baik.
Contoh ganda :
Pengaturan:
let defaults = UserDefaults.standard
var someDouble:Double = 0.5
defaults.set(someDouble, forKey: "someDouble")
Mendapatkan:
let defaults = UserDefaults.standard
var someDouble:Double = 0.0
someDouble = defaults.double(forKey: "someDouble")
Yang menarik dari salah satu getter adalah dictionaryRepresentation , pengambil berguna ini akan mengambil semua tipe data Anda apa pun mereka dan memasukkannya ke dalam kamus yang bagus yang dapat Anda akses dengan nama stringnya dan memberikan tipe data yang sesuai saat Anda meminta kembali karena itu tipe 'apa saja' .
Anda dapat menyimpan kelas dan objek Anda sendiri juga menggunakan func set(Any?, forKey: String)
danfunc object(forKey: String) -> Any?
setter dan pengambil sesuai.
Semoga ini menjelaskan lebih banyak kekuatan kelas UserDefaults untuk menyimpan data lokal.
Dengan catatan berapa banyak yang harus Anda simpan dan seberapa sering, Hardy_Germany memberikan jawaban yang bagus tentang hal itu pada posting ini , berikut adalah kutipan darinya
Seperti yang telah disebutkan: Saya tidak mengetahui adanya batasan SIZE (kecuali memori fisik) untuk menyimpan data dalam .plist (mis. UserDefaults). Jadi ini bukan pertanyaan BAGAIMANA BANYAK.
Pertanyaan yang sebenarnya seharusnya adalah BAGAIMANA ANDA SERING menulis nilai yang baru / berubah ... Dan ini terkait dengan pengurasan baterai yang disebabkan oleh penulisan ini.
IOS tidak memiliki kesempatan untuk menghindari tulisan fisik ke "disk" jika ada satu nilai yang berubah, hanya untuk menjaga integritas data. Mengenai UserDefaults ini menyebabkan seluruh file ditulis ulang ke disk.
Ini memperkuat "disk" dan membuatnya tetap menyala untuk waktu yang lebih lama dan mencegah IOS masuk ke kondisi daya rendah.
Hal lain yang perlu diperhatikan sebagaimana disebutkan oleh pengguna Mohammad Reza Farahani dari postingan ini adalah sifat asinkron dan sinkron dari userDefaults.
Ketika Anda menetapkan nilai default, itu berubah secara sinkron dalam proses Anda, dan secara tidak sinkron ke penyimpanan persisten dan proses lainnya.
Misalnya, jika Anda menyimpan dan menutup program dengan cepat, Anda mungkin memperhatikan bahwa itu tidak menyimpan hasil, ini karena program itu tetap asinkron. Anda mungkin tidak memperhatikan hal ini setiap saat, jadi jika Anda berencana menabung sebelum keluar dari program, Anda mungkin ingin memperhitungkannya dengan memberikan waktu untuk menyelesaikannya.
Mungkin ada yang punya solusi bagus untuk ini yang bisa mereka bagikan di komentar?