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

質問編集履歴

3

書式の改善。

2020/09/17 14:37

投稿

kazuki_user
kazuki_user

スコア147

title CHANGED
File without changes
body CHANGED
@@ -1,52 +1,39 @@
1
1
  ## なぜクロージャではselfを使うのか【Swift】
2
2
 
3
- #### 1
4
- クロージャを使う時には何となく`self`を付けていたのですが、理由を知りたいです。
3
+ **`self`をキャプチャすることを明示するため。**と書かれていたのですが、
4
+ [**参考サイト**](https://qiita.com/mishimay/items/1232dbfe8208e77ed10e#self-%E3%81%8C%E5%BF%85%E8%A6%81)
5
5
 
6
- 「`循環参照`」という言葉と関係あるのでしょうか?
6
+ 以下コード場合、下記の記述は正しいでしょうか?
7
- (-> メモリリーク恐れがある、という事しかまだ知らないです。????‍♂️)
7
+ > 関数scope_3へキャプチャを明示す`self.scope_3`記述
8
+ 因みに`self`は、`Foo`クラスを指しています。
8
9
 
9
- #### 2
10
+ #### 質問
10
- クロージャ内でselfを**強参照**でキャプチャする事による**循環参照**を避ける為に`[weak self]`(**弱参照**)を使用すると聞いたのですが、
11
11
 
12
- `self`だけでは足りなという事でしょうか?????
12
+ - `Foo`クラスを **キャプチャ**してるのでしょうか?
13
+ - `self.scope_3`(= 関数scope_3) を**キャプチャ**しているのでしょうか?
13
14
 
15
+ 関数scope_3の変数`tete`への参照を保持しているので、後者の説明がしっくり来るのですが...????
16
+ 参考サイトの考えによると、前者が正しいっぽいですが..
14
17
 
15
18
 
16
- ## コード
17
-
18
- クロージャを使用しているコードです。
19
- `Foo`クラスの`{ closure(self.val) }`のselfについて伺いたいです。
20
-
21
19
  ```swift
20
+ // scope_4関数は、scope_3関数から返されたクロージャを2回実行しています。
22
21
  class Foo {
23
- let val:Int = 10
24
-
25
- func testClosure(closure: (Int) -> Void) {
22
+ func scope_3() -> () -> Void {
23
+ var tete = 10
26
- closure(self.val) // -> selfを付けるのは何故?
24
+ let closure = { tete += 1
25
+ print(tete)
26
+ }
27
+ return closure
27
28
  }
28
- }
29
-
30
- class Bar {
31
- let foo = Foo()
32
29
 
33
- // 引数の値を倍にする
34
- func twice() {
30
+ func scope_4() {
35
- foo.testClosure{ arg in print(arg * 2) } // arg = argument = 引数
31
+ let tutu = self.scope_3()
32
+ tutu()
33
+ tutu()
36
34
  }
37
-
38
- // 引数の値を半分にする
39
- func half() {
40
- foo.testClosure{ arg in print(arg / 2) }
41
- }
42
35
  }
43
-
44
- let bar = Bar()
45
- bar.twice() // 20
46
- bar.half() // 5
47
-
48
36
  ```
49
37
 
50
-
51
38
  質問は以上です。
52
39
  お時間あるときに、ご返信頂けましたら幸いです????

2

書式の改善。

2020/09/17 14:37

投稿

kazuki_user
kazuki_user

スコア147

title CHANGED
@@ -1,1 +1,1 @@
1
- なぜクロージャselfを付けるのか【Swift】
1
+ なぜクロージャではselfを使うのか【Swift】
body CHANGED
@@ -1,4 +1,4 @@
1
- ## なぜクロージャselfを付けるのか【Swift】
1
+ ## なぜクロージャではselfを使うのか【Swift】
2
2
 
3
3
  #### 1
4
4
  クロージャを使う時には何となく`self`を付けていたのですが、理由を知りたいです。

1

書式の改善。

2020/09/17 13:12

投稿

kazuki_user
kazuki_user

スコア147

title CHANGED
@@ -1,1 +1,1 @@
1
- クロージャにselfを付けるのは何故?
1
+ なぜクロージャにselfを付けるのか【Swift】
body CHANGED
@@ -1,4 +1,4 @@
1
- ## クロージャにselfを付けるのは何故?
1
+ ## なぜクロージャにselfを付けるのか【Swift】
2
2
 
3
3
  #### 1
4
4
  クロージャを使う時には何となく`self`を付けていたのですが、理由を知りたいです。