質問編集履歴

3

書式の改善。

2020/09/17 14:37

投稿

kazuki_user
kazuki_user

スコア147

test CHANGED
File without changes
test CHANGED
@@ -2,99 +2,73 @@
2
2
 
3
3
 
4
4
 
5
- #### 1
5
+ **`self`をキャプチャすることを明示するため。**と書かれていたのですが、
6
6
 
7
- クロージャを使う時には何となく`self`を付けていたのですが、理由を知りたいです。
7
+ [**参考サイト**](https://qiita.com/mishimay/items/1232dbfe8208e77ed10e#self-%E3%81%8C%E5%BF%85%E8%A6%81)
8
8
 
9
9
 
10
10
 
11
- 「`循環参照`」とう言葉と関係あるのでしょうか?
11
+ 以下コードの場合、下記の記述は正しいでしょうか?
12
12
 
13
- (-> メモリリーク恐れがある、という事しかまだ知らないです。????‍♂️)
13
+ > 関数scope_3へキャプチャを明示す`self.scope_3`記述
14
+
15
+ 因みに`self`は、`Foo`クラスを指しています。
14
16
 
15
17
 
16
18
 
17
- #### 2
19
+ #### 質問
18
-
19
- クロージャ内でselfを**強参照**でキャプチャする事による**循環参照**を避ける為に`[weak self]`(**弱参照**)を使用すると聞いたのですが、
20
20
 
21
21
 
22
22
 
23
- `self`だけでは足りなという事でしょうか?????
23
+ - `Foo`クラスを **キャプチャ**してるのでしょうか?
24
+
25
+ - `self.scope_3`(= 関数scope_3) を**キャプチャ**しているのでしょうか?
26
+
27
+
28
+
29
+ 関数scope_3の変数`tete`への参照を保持しているので、後者の説明がしっくり来るのですが...????
30
+
31
+ 参考サイトの考えによると、前者が正しいっぽいですが..
24
32
 
25
33
 
26
34
 
27
35
 
28
36
 
37
+ ```swift
29
38
 
30
-
31
- ## コード
32
-
33
-
34
-
35
- クロージャを使用しているコードです。
36
-
37
- `Foo`クラスの`{ closure(self.val) }`のselfについたいです。
39
+ // scope_4関数は、scope_3関数から返されたクロージャを2回実行していす。
38
-
39
-
40
-
41
- ```swift
42
40
 
43
41
  class Foo {
44
42
 
43
+ func scope_3() -> () -> Void {
44
+
45
- let val:Int = 10
45
+ var tete = 10
46
+
47
+ let closure = { tete += 1
48
+
49
+ print(tete)
50
+
51
+ }
52
+
53
+ return closure
54
+
55
+ }
46
56
 
47
57
 
48
58
 
49
- func testClosure(closure: (Int) -> Void) {
59
+ func scope_4() {
50
60
 
51
- closure(self.val) // -> selfを付けるのは何故?
61
+ let tutu = self.scope_3()
62
+
63
+ tutu()
64
+
65
+ tutu()
52
66
 
53
67
  }
54
68
 
55
69
  }
56
70
 
57
-
58
-
59
- class Bar {
60
-
61
- let foo = Foo()
62
-
63
-
64
-
65
- // 引数の値を倍にする
66
-
67
- func twice() {
68
-
69
- foo.testClosure{ arg in print(arg * 2) } // arg = argument = 引数
70
-
71
- }
72
-
73
-
74
-
75
- // 引数の値を半分にする
76
-
77
- func half() {
78
-
79
- foo.testClosure{ arg in print(arg / 2) }
80
-
81
- }
82
-
83
- }
84
-
85
-
86
-
87
- let bar = Bar()
88
-
89
- bar.twice() // 20
90
-
91
- bar.half() // 5
92
-
93
-
94
-
95
71
  ```
96
-
97
-
98
72
 
99
73
 
100
74
 

2

書式の改善。

2020/09/17 14:37

投稿

kazuki_user
kazuki_user

スコア147

test CHANGED
@@ -1 +1 @@
1
- なぜクロージャselfを付けるのか【Swift】
1
+ なぜクロージャではselfを使うのか【Swift】
test CHANGED
@@ -1,4 +1,4 @@
1
- ## なぜクロージャselfを付けるのか【Swift】
1
+ ## なぜクロージャではselfを使うのか【Swift】
2
2
 
3
3
 
4
4
 

1

書式の改善。

2020/09/17 13:12

投稿

kazuki_user
kazuki_user

スコア147

test CHANGED
@@ -1 +1 @@
1
- クロージャにselfを付けるのは何故?
1
+ なぜクロージャにselfを付けるのか【Swift】
test CHANGED
@@ -1,4 +1,4 @@
1
- ## クロージャにselfを付けるのは何故?
1
+ ## なぜクロージャにselfを付けるのか【Swift】
2
2
 
3
3
 
4
4