質問するログイン新規登録

回答編集履歴

2

追記

2020/09/18 04:47

投稿

kazuki_user
kazuki_user

スコア147

answer CHANGED
@@ -1,25 +1,8 @@
1
- (未解決に戻しました。)
2
- **`self`をキャプチャするとを明示するため。**
1
+ > (`Escaping Closures`は)**循環参照こす危険性がある**ので、
3
- [**考サイト**](https://qiita.com/mishimay/items/1232dbfe8208e77ed10e#self-%E3%81%8C%E5%BF%85%E8%A6%81)
2
+ (プログラマにそれを意識させるために)クロージャーの中で親スコープを強照するときは`self`をつける。
4
3
 
5
- 以下コードの場合、関数scope_3へのキャプチャを明示する為、`self.scope_3`と記述する。
6
- 因みに`self`は、`Foo`クラスしています。
4
+ > `self`を付けることが**循環参照を防ぐことに直結しているわけではなくて**、
5
+ コードの意図が明確になり、循環参照しないかにプログラマが意識を向けて書くようになる、
7
6
 
8
- ```swift
7
+
9
- // scope_4関数は、scope_3関数から返されたクロージャを2回実行す。
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

追記

2020/09/18 04:47

投稿

kazuki_user
kazuki_user

スコア147

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