Custom Class object in NSUserDefault

Varun Singhal
1 min readOct 10, 2020

First thing is Your Model class is subclass of NSObject and confirm to Coding Protocol

import Foundation

class Person : NSObject,NSCoding{

var name :String

var age : Int

init(name:String,age:Int){

self.name = name

self.age = age

}

func encode(with coder: NSCoder) {

coder.encode(age,forKey: “age”)

coder.encode(name,forKey: “name”)

}

required convenience init?(coder: NSCoder) {

guard let name = coder.decodeObject(forKey: “name”) as? String else { return nil }

let age = coder.decodeInteger(forKey: “age”)

self.init(name :name,age :age)

}

}

import UIKit

class ViewController: UIViewController {

override func viewDidLoad() {

super.viewDidLoad()

//Encoding Custom Object

let people = [Person(name: “varun”, age: 1), Person(name: “varun”, age: 2),]

do {

let encode = try NSKeyedArchiver.archivedData(withRootObject: people, requiringSecureCoding: false)

UserDefaults.standard.set(encode, forKey: “encodedData”)

print(encode)

let decoded = UserDefaults.standard.object(forKey: “encodedData”) as! Data

do {

let decodepeople = try? NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(decoded) as? [Person]

print(decodepeople)

}catch{

}

}catch{

}

// Do any additional setup after loading the view.

}

}

--

--