File tree 4 files changed +50
-2
lines changed
Pages/Memento.xcplaygroundpage
GOFSwift.xcworkspace/xcuserdata/sebastianboldt.xcuserdatad
4 files changed +50
-2
lines changed Original file line number Diff line number Diff line change
1
+ //: [Previous](@previous)
2
+
3
+ import Foundation
4
+
5
+ typealias Memento = NSDictionary
6
+
7
+ protocol MementoConvertible {
8
+ init ? ( memento: Memento )
9
+ var memento : Memento { get }
10
+ }
11
+
12
+ struct Student : MementoConvertible {
13
+ var memento : Memento {
14
+ return [ " name " : self . name, " age " : self . age]
15
+ }
16
+
17
+ private var name : String
18
+ private var age : Int
19
+
20
+ init ? ( memento: Memento ) {
21
+ guard let name = memento. object ( forKey: " name " ) as? String else {
22
+ return nil
23
+ }
24
+
25
+ guard let age = memento. object ( forKey: " age " ) as? Int else {
26
+ return nil
27
+ }
28
+
29
+ self . name = name
30
+ self . age = age
31
+ }
32
+ }
33
+
34
+ struct Store {
35
+ func store( name: String , memento: Memento ) {
36
+ let defaults = UserDefaults . standard
37
+ defaults. set ( memento, forKey: name)
38
+ defaults. synchronize ( )
39
+ }
40
+
41
+ func retrieveStudent( name: String ) -> Memento ? {
42
+ let defaults = UserDefaults . standard
43
+ return defaults. object ( forKey: name) as? Memento
44
+ }
45
+ }
46
+
47
+ //: [Next](@next)
Original file line number Diff line number Diff line change 8
8
<page name =' Mediator' />
9
9
<page name =' Observer' />
10
10
<page name =' Visitor' />
11
+ <page name =' Memento' />
11
12
</pages >
12
13
</playground >
Original file line number Diff line number Diff line change 14
14
* β
Mediator
15
15
* β
Visitor
16
16
* β
Observer
17
- * β Memento
18
- * β Interpreter
17
+ * β
Memento
19
18
* β State
19
+ * β Interpreter
20
20
21
21
## Creational
22
22
You canβt perform that action at this time.
0 commit comments