回答編集履歴

2

修正

2016/11/24 22:15

投稿

_Kentarou
_Kentarou

スコア8490

test CHANGED
@@ -1,3 +1,13 @@
1
+ > 初めViewController1で押した回数をapp delegateを通ってViewController3に送り、押した回数を表示させます。
2
+
3
+ 次にViewController2で押した回数をapp delegateを通ってViewController3に送り、1で押した回数との合計を表示させたいと思っています。
4
+
5
+
6
+
7
+ `UserDefaults`を使用する場合`app delegate`経由で値を渡す必要はありません。
8
+
9
+
10
+
1
11
  以下の様にすると各画面でボタンを押したものを合計してラベルに表示できます。
2
12
 
3
13
 

1

修正

2016/11/24 22:15

投稿

_Kentarou
_Kentarou

スコア8490

test CHANGED
@@ -93,3 +93,143 @@
93
93
  }
94
94
 
95
95
  ```
96
+
97
+
98
+
99
+ ★ おまけ
100
+
101
+
102
+
103
+ 各画面に同じ処理を書くのが単調なのでどこかに処理をまとめるとスッキリします。
104
+
105
+ 以下は`UserDefaults`の`extension`としてまとめました。
106
+
107
+
108
+
109
+ 参考にしてみてください。
110
+
111
+
112
+
113
+ ```swift
114
+
115
+ import UIKit
116
+
117
+
118
+
119
+ class ViewController1: UIViewController {
120
+
121
+
122
+
123
+ @IBAction func pushCountUpButton(_ sender: UIButton) {
124
+
125
+
126
+
127
+ // 拡張したUserDefaultsメソッドを呼び出し
128
+
129
+ UserDefaults.standard.countUp()
130
+
131
+ }
132
+
133
+ }
134
+
135
+
136
+
137
+ class ViewController2: UIViewController {
138
+
139
+
140
+
141
+ @IBAction func pushCountUpButton(_ sender: UIButton) {
142
+
143
+
144
+
145
+ // 拡張したUserDefaultsメソッドを呼び出し
146
+
147
+ UserDefaults.standard.countUp()
148
+
149
+ }
150
+
151
+ }
152
+
153
+
154
+
155
+ class ViewController3: UIViewController {
156
+
157
+
158
+
159
+ @IBOutlet weak var countLabel: UILabel!
160
+
161
+
162
+
163
+ override func viewDidLoad() {
164
+
165
+ super.viewDidLoad()
166
+
167
+
168
+
169
+ // 拡張したUserDefaultsメソッドを呼び出し
170
+
171
+ countLabel.text = "\(UserDefaults.standard.getCount())"
172
+
173
+ }
174
+
175
+ }
176
+
177
+
178
+
179
+
180
+
181
+ // UserDefaultsを拡張
182
+
183
+ extension UserDefaults {
184
+
185
+
186
+
187
+ // Keyを定義
188
+
189
+ var countKey: String {
190
+
191
+ return "count"
192
+
193
+ }
194
+
195
+
196
+
197
+ // CountをUpするメソッド
198
+
199
+ func countUp() {
200
+
201
+ var count = UserDefaults.standard.integer(forKey: self.countKey)
202
+
203
+ count += 1
204
+
205
+ UserDefaults.standard.set(count, forKey: self.countKey)
206
+
207
+ UserDefaults.standard.synchronize()
208
+
209
+ }
210
+
211
+
212
+
213
+ // 現在のCountを取得する
214
+
215
+ func getCount() -> Int {
216
+
217
+ return UserDefaults.standard.integer(forKey: self.countKey)
218
+
219
+ }
220
+
221
+
222
+
223
+ // Countをリセット
224
+
225
+ func resetCount() {
226
+
227
+ UserDefaults.standard.set(0, forKey: self.countKey)
228
+
229
+ UserDefaults.standard.synchronize()
230
+
231
+ }
232
+
233
+ }
234
+
235
+ ```