回答編集履歴

1

例題の追加

2021/02/02 12:45

投稿

TsukubaDepot
TsukubaDepot

スコア5086

test CHANGED
@@ -195,3 +195,111 @@
195
195
 
196
196
 
197
197
  - [Closures](https://docs.swift.org/swift-book/LanguageGuide/Closures.html)
198
+
199
+
200
+
201
+ ---
202
+
203
+ 追記
204
+
205
+
206
+
207
+ クロージャの便利さと機能がわかりやすい例を考えていたのですが、どうも駄作しかできませんので、とりあえずサンプルを一つ提示します。
208
+
209
+
210
+
211
+ このコードを Playground で実行し、いろいろご自身で手を加えて実行して、どのような動作をするのか確かめてみるのも一つかもしれません。
212
+
213
+
214
+
215
+ とりあえず言えることは、
216
+
217
+ 現時点で学ばれているクロージャの利点は、**提供されているメソッドを、その利用者独自の柔軟性をもって拡張できる点にある**、ということです。
218
+
219
+
220
+
221
+ ```Swift
222
+
223
+ import Foundation
224
+
225
+
226
+
227
+ func fetchUser() {
228
+
229
+ print("太郎")
230
+
231
+ }
232
+
233
+
234
+
235
+ func fetchUserWithKun() {
236
+
237
+ print("太郎くん")
238
+
239
+ }
240
+
241
+
242
+
243
+ func fetchUserWithHandler(completion: (String) -> Void) {
244
+
245
+ let name = "太郎"
246
+
247
+
248
+
249
+ completion(name)
250
+
251
+ }
252
+
253
+
254
+
255
+ // 決まりきった名前しか表示できない
256
+
257
+ fetchUser()
258
+
259
+
260
+
261
+ // 「くん」を付ける関数を作る
262
+
263
+ // でも、この方法だと拡張性に欠ける
264
+
265
+ fetchUserWithKun()
266
+
267
+
268
+
269
+
270
+
271
+ // クロージャを使うことで拡張性を高める
272
+
273
+ // 一つのメソッドに対して、さまざまな処理方法を追加できる
274
+
275
+
276
+
277
+ // fetchUserWithHandler で取得した名前に対して「さん」づけで表示できる
278
+
279
+ fetchUserWithHandler { name in
280
+
281
+ print("with closure: (name) さん")
282
+
283
+ }
284
+
285
+
286
+
287
+ // fetchUserWithHandler で取得した名前に対して「くん」づけで表示できる
288
+
289
+ fetchUserWithHandler { name in
290
+
291
+ print("with closure: (name) くん")
292
+
293
+ }
294
+
295
+
296
+
297
+ // fetchUserWithHandler で取得した名前に対して「Mr」の敬称をつける
298
+
299
+ fetchUserWithHandler { name in
300
+
301
+ print("with closure: Mr. (name)")
302
+
303
+ }
304
+
305
+ ```