回答編集履歴
2
追記
answer
CHANGED
@@ -1,25 +1,8 @@
|
|
1
|
-
(未解決に戻しました。)
|
2
|
-
|
1
|
+
> (`Escaping Closures`は)**循環参照を起こす危険性がある**ので、
|
3
|
-
|
2
|
+
(プログラマにそれを意識させるために)クロージャーの中で親スコープを強参照するときは`self`をつける。
|
4
3
|
|
5
|
-
以下コードの場合、関数scope_3へのキャプチャを明示する為、`self.scope_3`と記述する。
|
6
|
-
|
4
|
+
> `self`を付けることが**循環参照を防ぐことに直結しているわけではなくて**、
|
5
|
+
コードの意図が明確になり、循環参照しないかにプログラマが意識を向けて書くようになる、
|
7
6
|
|
8
|
-
|
7
|
+
|
9
|
-
|
8
|
+
つまり、明示的な`self`には、**循環参照**が存在しないよう確認を促す役割がある。
|
10
|
-
class Foo {
|
11
|
-
func scope_3() -> () -> Void {
|
12
|
-
var tete = 10
|
13
|
-
let closure = { tete += 1
|
14
|
-
print(tete)
|
15
|
-
}
|
16
|
-
return closure
|
17
|
-
}
|
18
|
-
|
19
|
-
func scope_4() {
|
20
|
-
let tutu = self.scope_3()
|
21
|
-
tutu()
|
22
|
-
tutu()
|
23
|
-
}
|
24
|
-
}
|
25
|
-
```
|
1
追記
answer
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
(未解決に戻しました。)
|
1
2
|
**`self`をキャプチャすることを明示するため。**
|
2
3
|
[**参考サイト**](https://qiita.com/mishimay/items/1232dbfe8208e77ed10e#self-%E3%81%8C%E5%BF%85%E8%A6%81)
|
3
4
|
|