Skip to content

Instantly share code, notes, and snippets.

@LH17
Created January 1, 2019 15:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save LH17/1474aa12383ca0754ebdfbb602ff0448 to your computer and use it in GitHub Desktop.
Save LH17/1474aa12383ca0754ebdfbb602ff0448 to your computer and use it in GitHub Desktop.
Memento Design Pattern
import UIKit
typealias MementoType = [String: Any]
protocol Memento: class {
var key: String { get set }
var state: MementoType { get set }
func save()
func retrieve()
}
extension Memento {
func save() {
UserDefaults.standard.set(state, forKey: key)
}
func retrieve() {
state = (UserDefaults.standard.object(forKey: key) as? MementoType) ?? MementoType()
}
}
class Profile: Memento {
var key: String
var state: MementoType
var name: String
var age: Int
init(name: String, age: Int, key: String) {
self.name = name
self.age = age
self.key = key
self.state = MementoType()
}
func saveDetails() {
state["name"] = name
state["age"] = age
save()
}
init(key: String) {
self.key = key
self.state = MementoType()
self.name = ""
self.age = 0
}
func retrieveDetails() -> MementoType {
retrieve()
return state
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment