Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 1c6a120

Browse files
author
Td Kim
authored
Update README.md
1 parent 784b39f commit 1c6a120

File tree

1 file changed

+79
-0
lines changed

1 file changed

+79
-0
lines changed

‎iOS10 MVVM Pattern Example/README.md

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,84 @@
11
#MVVM Pattern
22

3+
```Model``` - ```View``` - ```ViewModel```
4+
5+
6+
```View``` <-> ```Controller``` <-> ```ViewModel``` <-> ```Model```
7+
8+
9+
###Person Class
10+
```swift
11+
class Person {
12+
var firstName: String?
13+
var lastName: String?
14+
var birthDate: Date?
15+
16+
init(firstName: String, lastName: String, salutation: String, birthDate: Date) {
17+
self.firstName = firstName
18+
self.lastName = lastName
19+
self.birthDate = birthDate
20+
}
21+
}
22+
```
23+
24+
### In ViewController
25+
26+
- MVC
27+
```swift
28+
override func viewDidLoad() {
29+
super.viewDidLoad()
30+
31+
//This is MVC Pattern
32+
nameLabel.text = "\((person?.firstName)!) \((person?.lastName)!)"
33+
let dateFormatter = DateFormatter()
34+
dateFormatter.dateFormat = "EEEE MMMM d, yyyy"
35+
birthDateLabel.text = dateFormatter.string(from: (person?.birthDate)!)
36+
}
37+
```
38+
- The presentation logic is in a view controller.
39+
40+
###Person View Model Class
41+
```swift
42+
class PersonViewModel {
43+
private var person: Person
44+
45+
var firstNameText: String? {
46+
return person.firstName
47+
}
48+
49+
var lastNameText: String? {
50+
return person.lastName
51+
}
52+
53+
var fullNameText: String? {
54+
return "\(person.firstName!) \(person.lastName!)"
55+
}
56+
57+
var birthDateText: String? {
58+
let dateFormatter = DateFormatter()
59+
dateFormatter.dateFormat = "EEEE MMMM d, yyyy"
60+
return dateFormatter.string(from: person.birthDate!)
61+
}
62+
63+
init(person: Person) {
64+
self.person = person
65+
}
66+
}
67+
```
68+
- The presentation logic is in a view model.
69+
70+
### In View controller
71+
- MVVM
72+
```swift
73+
override func viewDidLoad() {
74+
super.viewDidLoad()
75+
76+
//This is MVVM Pattern
77+
nameLabel.text = personViewModel?.fullNameText
78+
birthDateLabel.text = personViewModel?.birthDateText
79+
}
80+
```
81+
- ```viewDidLoad``` method is now very lightweight.
382

483

584
###Ref

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /