回答編集履歴

1

回答追記

2018/03/07 12:17

投稿

toki_td
toki_td

スコア2850

test CHANGED
@@ -25,3 +25,77 @@
25
25
  そのため、あとからそれを使用するアプリ側は先の設計に合わせる必要があるので、未使用でもエラーにはなりません。
26
26
 
27
27
  アプリ側がそれを必要としないなら単純に_(アンダースコア)にしておけばいいですよ。
28
+
29
+
30
+
31
+ **---------- 下の回答に対する追記です -------------------**
32
+
33
+
34
+
35
+ クロージャについてなんか思い違いをされているように思うのですが、クロージャはもともとオブジェクトですから以下のように変数として持つことができます。
36
+
37
+
38
+
39
+ ```Swift
40
+
41
+ let fun = {(action: UIAlertAction) in // クロージャをfunに代入
42
+
43
+ NSLog("Camera");
44
+
45
+ };
46
+
47
+
48
+
49
+ let cameraAction = UIAlertAction(title: "カメラ", style: .default, handler:fun)
50
+
51
+
52
+
53
+ fun(cameraAction) // こんな感じで呼び出せる
54
+
55
+ ```
56
+
57
+
58
+
59
+ ですから、UIAlertActionが渡したクロージャをそのまま持っていると思います。
60
+
61
+
62
+
63
+ UIAlertController内は実際の実装がどうなっているのかは知りませんが、以下のような感じだと思います。
64
+
65
+
66
+
67
+ ```Swift
68
+
69
+ var actions : [UIAlertAction] = []
70
+
71
+
72
+
73
+ func addAction(action:UIAlertAction)
74
+
75
+ {
76
+
77
+ actions.append(action)
78
+
79
+ }
80
+
81
+
82
+
83
+ func actionSelected(index:Int) // indexは選択されたアクションのインデックス
84
+
85
+ {
86
+
87
+ var action = actions[index];
88
+
89
+ action.handler(action) // ここで選択されたactionを引数としてアプリ側のクロージャが呼ばれる
90
+
91
+ }
92
+
93
+ ```
94
+
95
+
96
+
97
+ > 同じように _ に変えてしまっても良いのでしょうか?
98
+
99
+
100
+
101
+ Swiftだと未使用な引数は _ にしておけばコンパイラに未使用なのを明示することができるのでそれに合わせてもいいですし、クロージャの場合はactionでもエラーになりませんからどちらでもいいと思います。