質問編集履歴

5

ダメなコードを追加しました

2017/04/15 12:56

投稿

apple2
apple2

スコア37

test CHANGED
File without changes
test CHANGED
@@ -37,3 +37,51 @@
37
37
  }
38
38
 
39
39
  ```
40
+
41
+
42
+
43
+ これも同じ結果でした
44
+
45
+
46
+
47
+ ```Swift3
48
+
49
+ @IBOutlet var myWeb: WKWebView!
50
+
51
+ let semaphore = DispatchSemaphore(value: 0)
52
+
53
+ let queue = DispatchQueue.global(qos: .default)
54
+
55
+ var html = "empty"
56
+
57
+
58
+
59
+ @IBAction func btn3(_ sender: Any) {
60
+
61
+ self.queue.async {
62
+
63
+ self.myWeb.evaluateJavaScript("document.body.innerHTML;", completionHandler: { (object, error) -> Void in
64
+
65
+ self.html = String(describing: object)
66
+
67
+ print(self.html + "processing")
68
+
69
+ self.semaphore.signal()
70
+
71
+ })
72
+
73
+ }
74
+
75
+
76
+
77
+ print("waiting")
78
+
79
+ self.semaphore.wait()
80
+
81
+ print("finish \(self.html)")
82
+
83
+ }
84
+
85
+
86
+
87
+ ```

4

コードを変更しました

2017/04/15 12:56

投稿

apple2
apple2

スコア37

test CHANGED
File without changes
test CHANGED
@@ -1,25 +1,39 @@
1
1
  webViewの中身を取得してその内容にもとづいて次の仕事にかかりたいのですが、semaphoreはどう書けばいいのでしょう?
2
2
 
3
- 実行すると無反応になります
3
+ 実行するとwaitingのまま帰ってこくなります
4
4
 
5
5
 
6
6
 
7
- ```swift3
7
+ ```Swift3
8
8
 
9
- let semaphore = DispatchSemaphore(value: 0)
9
+ @IBOutlet var myWeb: WKWebView!
10
10
 
11
- var html = "empty"
11
+ let semaphore = DispatchSemaphore(value: 0)
12
12
 
13
- myweb.evaluateJavaScript("document.body.innerHTML;", completionHandler: { (object, error) -> Void in
13
+ var html = "empty"
14
14
 
15
- html = String(describing: object)
15
+
16
16
 
17
+ @IBAction func btn3(_ sender: Any) {
18
+
19
+ self.myWeb.evaluateJavaScript("document.body.innerHTML;", completionHandler: { (object, error) -> Void in
20
+
21
+ self.html = String(describing: object)
22
+
23
+ print("processing")
24
+
17
- semaphore.signal()
25
+ self.semaphore.signal()
18
26
 
19
27
  })
20
28
 
21
- _ = semaphore.wait(timeout: DispatchTime.distantFuture)
29
+
22
30
 
23
- print( html )
31
+ print("waiting")
32
+
33
+ semaphore.wait()
34
+
35
+ print("finish \(self.html)")
36
+
37
+ }
24
38
 
25
39
  ```

3

タイトルを変更しました

2017/04/15 12:34

投稿

apple2
apple2

スコア37

test CHANGED
@@ -1 +1 @@
1
- evaluateJavaScriptを同期的にするにはsemaphore使う?
1
+ swiftsemaphore使い方
test CHANGED
@@ -1,16 +1,6 @@
1
- ```Swift3
1
+ webViewの中身を取得してその内容にもとづいて次の仕事にかかりたいのですが、semaphoreはどう書けばいいのでしょう?
2
2
 
3
- self.myweb.evaluateJavaScript("document.body.innerHTML;", completionHandler: {(html ,error) in
4
-
5
- print(String(describing: html))
3
+ 実行すると無反応になります
6
-
7
- }
8
-
9
- ```
10
-
11
-
12
-
13
- webViewの中身を取得してその内容にもとづいて次の仕事にかかりたいのですが、同期的に動作させるにはどう書けばいいのでしょう?
14
4
 
15
5
 
16
6
 
@@ -30,10 +20,6 @@
30
20
 
31
21
  _ = semaphore.wait(timeout: DispatchTime.distantFuture)
32
22
 
33
- mytext.stringValue = html
23
+ print( html )
34
24
 
35
25
  ```
36
-
37
-
38
-
39
- semaphoreを使ってみましたが、使い方がよくわかっていませんので、ちゃんと動きません

2

誤字

2017/04/15 03:33

投稿

apple2
apple2

スコア37

test CHANGED
File without changes
test CHANGED
@@ -18,9 +18,9 @@
18
18
 
19
19
  let semaphore = DispatchSemaphore(value: 0)
20
20
 
21
- var html = "eee"
21
+ var html = "empty"
22
22
 
23
- myWeb.evaluateJavaScript("document.body.innerHTML;", completionHandler: { (object, error) -> Void in
23
+ myweb.evaluateJavaScript("document.body.innerHTML;", completionHandler: { (object, error) -> Void in
24
24
 
25
25
  html = String(describing: object)
26
26
 

1

semaphoreを試してみました

2017/04/15 00:43

投稿

apple2
apple2

スコア37

test CHANGED
@@ -1 +1 @@
1
- evaluateJavaScriptを同期的に
1
+ evaluateJavaScriptを同期的にするにはsemaphoreを使う?
test CHANGED
@@ -11,3 +11,29 @@
11
11
 
12
12
 
13
13
  webViewの中身を取得してその内容にもとづいて次の仕事にかかりたいのですが、同期的に動作させるにはどう書けばいいのでしょう?
14
+
15
+
16
+
17
+ ```swift3
18
+
19
+ let semaphore = DispatchSemaphore(value: 0)
20
+
21
+ var html = "eee"
22
+
23
+ myWeb.evaluateJavaScript("document.body.innerHTML;", completionHandler: { (object, error) -> Void in
24
+
25
+ html = String(describing: object)
26
+
27
+ semaphore.signal()
28
+
29
+ })
30
+
31
+ _ = semaphore.wait(timeout: DispatchTime.distantFuture)
32
+
33
+ mytext.stringValue = html
34
+
35
+ ```
36
+
37
+
38
+
39
+ semaphoreを使ってみましたが、使い方がよくわかっていませんので、ちゃんと動きません