回答編集履歴

2

追記

2020/09/18 04:47

投稿

kazuki_user
kazuki_user

スコア147

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

1

追記

2020/09/18 04:47

投稿

kazuki_user
kazuki_user

スコア147

test CHANGED
@@ -1,3 +1,5 @@
1
+ (未解決に戻しました。)
2
+
1
3
  **`self`をキャプチャすることを明示するため。**
2
4
 
3
5
  [**参考サイト**](https://qiita.com/mishimay/items/1232dbfe8208e77ed10e#self-%E3%81%8C%E5%BF%85%E8%A6%81)