Trong bài viết này, chúng ta sẽ tìm hiểu cách lưu trữ các đối tượng tùy chỉnh trong ứng dụng của mình, nhưng trước khi bạn tìm hiểu cách lưu trữ đối tượng tùy chỉnh, hãy xem đối tượng tùy chỉnh là gì?
Đối tượng tùy chỉnh là bất kỳ lớp hoặc cấu trúc nào hoặc bất kỳ dữ liệu nào khác không phải là kiểu dữ liệu gốc như Int, Double, String, v.v. Lưu trữ dữ liệu trong NSUserDefaults là một quy trình ba bước.
Tạo đối tượng tùy chỉnh
Chúng tôi sẽ tạo một lớp tùy chỉnh Person sẽ có một biến độ tuổi và biến tên.
class Person: NSObject, NSCoding { var name: String var age: Int init(name: String, age: Int) { self.name = name self.age = age } required convenience init(coder aCoder: NSCoder) { let name = aCoder.decodeObject(forKey: "name") as! String let age = aCoder.decodeInteger(forKey: "age") self.init(name: name, age: age) } func encode(with acoder: NSCoder) { acoder.encode(age,forKey: "age") acoder.encode(name,forKey: "name") } }
Mã hóa đối tượng tùy chỉnh
Trong bước này, chúng tôi sẽ tạo một mảng đối tượng người, gọi nó là người và khởi tạo nó với dữ liệu ngẫu nhiên. Sau khi tạo đối tượng đó, chúng tôi sẽ sử dụng NSKeyedArchiver để lưu trữ đối tượng này và sau đó lưu trữ trong userDefaults.
let people = [ Person.init(name: "P1", age: 1), Person.init(name: "P2", age: 2), Person.init(name: "P3", age: 3), ] let encoded = NSKeyedArchiver.archivedData(withRootObject: people) UserDefaults.standard.set(encoded, forKey: "encodedData")
Bây giờ chúng tôi đã lưu thành công đối tượng được lưu trữ trong dữ liệu cốt lõi, đã đến lúc chúng tôi hủy lưu trữ và in đối tượng đó.
Giải mã đối tượng tùy chỉnh
Tương tự như NSKeyedArchiver, chúng tôi có NSKeyedUnarchiver mà chúng tôi sẽ sử dụng để hủy lưu trữ đối tượng này.
let decoded = UserDefaults.standard.object(forKey: "encodedData") as! Data let decodedPeople = NSKeyedUnarchiver.unarchiveObject(with: decoded) as! [Person]
Bây giờ đối tượng “decodedPeople” này chứa đối tượng mà chúng tôi đã tạo ở bước thứ hai.
Chúng tôi có thể thực hiện các hoạt động mong muốn với tại đối tượng. Bây giờ, hãy xem tệp ViewController trông như thế nào;
import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. let people = [ Person.init(name: "P1", age: 1), Person.init(name: "P2", age: 2), Person.init(name: "P3", age: 3), ] let encoded = NSKeyedArchiver.archivedData(withRootObject: people) UserDefaults.standard.set(encoded, forKey: "encodedData") print("data decoded, encoding now") let decoded = UserDefaults.standard.object(forKey: "encodedData") as! Data let decodedPeople = NSKeyedUnarchiver.unarchiveObject(with: decoded) as! [Person] print(decodedPeople) } }
Bây giờ, hãy đặt dấu ngắt trên câu lệnh in cuối cùng và chạy mã này, khi được thực thi, hãy chạy lệnh này
po decodedPeople.first?.name
điều này sẽ dẫn đến
Optional<String> - some : "P1"
Cuối cùng thì đây là cách nó trông như thế này.