質問するログイン新規登録

回答編集履歴

2

修正

2016/11/24 22:15

投稿

_Kentarou
_Kentarou

スコア8490

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

1

修正

2016/11/24 22:15

投稿

_Kentarou
_Kentarou

スコア8490

answer CHANGED
@@ -45,4 +45,74 @@
45
45
  countLabel.text = "\(count)"
46
46
  }
47
47
  }
48
+ ```
49
+
50
+ ★ おまけ
51
+
52
+ 各画面に同じ処理を書くのが単調なのでどこかに処理をまとめるとスッキリします。
53
+ 以下は`UserDefaults`の`extension`としてまとめました。
54
+
55
+ 参考にしてみてください。
56
+
57
+ ```swift
58
+ import UIKit
59
+
60
+ class ViewController1: UIViewController {
61
+
62
+ @IBAction func pushCountUpButton(_ sender: UIButton) {
63
+
64
+ // 拡張したUserDefaultsメソッドを呼び出し
65
+ UserDefaults.standard.countUp()
66
+ }
67
+ }
68
+
69
+ class ViewController2: UIViewController {
70
+
71
+ @IBAction func pushCountUpButton(_ sender: UIButton) {
72
+
73
+ // 拡張したUserDefaultsメソッドを呼び出し
74
+ UserDefaults.standard.countUp()
75
+ }
76
+ }
77
+
78
+ class ViewController3: UIViewController {
79
+
80
+ @IBOutlet weak var countLabel: UILabel!
81
+
82
+ override func viewDidLoad() {
83
+ super.viewDidLoad()
84
+
85
+ // 拡張したUserDefaultsメソッドを呼び出し
86
+ countLabel.text = "\(UserDefaults.standard.getCount())"
87
+ }
88
+ }
89
+
90
+
91
+ // UserDefaultsを拡張
92
+ extension UserDefaults {
93
+
94
+ // Keyを定義
95
+ var countKey: String {
96
+ return "count"
97
+ }
98
+
99
+ // CountをUpするメソッド
100
+ func countUp() {
101
+ var count = UserDefaults.standard.integer(forKey: self.countKey)
102
+ count += 1
103
+ UserDefaults.standard.set(count, forKey: self.countKey)
104
+ UserDefaults.standard.synchronize()
105
+ }
106
+
107
+ // 現在のCountを取得する
108
+ func getCount() -> Int {
109
+ return UserDefaults.standard.integer(forKey: self.countKey)
110
+ }
111
+
112
+ // Countをリセット
113
+ func resetCount() {
114
+ UserDefaults.standard.set(0, forKey: self.countKey)
115
+ UserDefaults.standard.synchronize()
116
+ }
117
+ }
48
118
  ```