回答編集履歴

1

コメントを受けて追記

2020/06/17 05:17

投稿

TsukubaDepot
TsukubaDepot

スコア5086

test CHANGED
@@ -123,3 +123,65 @@
123
123
  }
124
124
 
125
125
  ```
126
+
127
+
128
+
129
+ ---
130
+
131
+ `guard-let`文も`if-let`文でも最終的な処理は同じように書けますが、変数のスコープや見通しの良さが変わってくるという特徴があります。
132
+
133
+
134
+
135
+ ```Swift
136
+
137
+ guard let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") else {
138
+
139
+ return UITableViewCell()
140
+
141
+ }
142
+
143
+
144
+
145
+ // guard let の場合は特例で、中カッコ以降も宣言した変数は有効になる
146
+
147
+ cell.textLabel?.text = selectedData[indexPath.row]
148
+
149
+
150
+
151
+ return cell
152
+
153
+ ```
154
+
155
+ `dequeueReusableCell(withIdentifier:)`で指定したセルがない場合`nil`が戻りますが、その場合は標準のセルを返す、という処理にするのであれば`guard-let`文のほうが見通しが効くかと思います。
156
+
157
+
158
+
159
+ また、`if-let`や`for-in`などとは違い、`guard-let`文は文中で宣言した変数の有効範囲が`guard-let`文以降でも有効になるという特徴もあるので、それを生かすことも可能です。
160
+
161
+
162
+
163
+ ちなみに、`if-let`文だとこのような感じになります。
164
+
165
+ ```Swift
166
+
167
+ if let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") {
168
+
169
+ // オプショナルバインディングの場合、cell のスコープはこの中カッコまでとなる
170
+
171
+ cell.textLabel?.text = selectedData[indexPath.row]
172
+
173
+
174
+
175
+ return cell
176
+
177
+ }
178
+
179
+
180
+
181
+ return UITableViewCell()
182
+
183
+ ```
184
+
185
+
186
+
187
+ 今回は単純な例ですが、もしセルのプロパティを色々と設定するような場合を考えると、この書き方は見通しが悪い書き方になるのはご理解いただけるのではないでしょうか。