質問編集履歴

2

実装方法を変えたところ、異なるエラーになったため修正

2018/12/29 12:17

投稿

shuji_kiritani
shuji_kiritani

スコア13

test CHANGED
File without changes
test CHANGED
@@ -2,9 +2,17 @@
2
2
 
3
3
 
4
4
 
5
- swift4.2 で WebAPI を叩いて Json を取得したいですが、うまくいきません
5
+ swift4.2 で WebAPI を叩いて Json を取得し、その Json から画像の URL を抽出して Koloda の View に追加したいです。
6
+
6
-
7
+ しかし、Json データの中身がうまく入っていないみたいで、
8
+
9
+ "if let image: String = json.info.photo[1].image_url {"
10
+
11
+ 上記の行で index out of range になってしまいます。
12
+
7
- どうやら関数自体実行されていないようなのですが、原因が分かればご教授頂けると幸いです。
13
+ URLSession.shared.dataTask 呼ばれていないような挙動に見えるのですが、解決方法が分かればご教授頂けると助かります。
14
+
15
+ よろしくお願いいたします。
8
16
 
9
17
 
10
18
 
@@ -16,6 +24,8 @@
16
24
 
17
25
  import UIKit
18
26
 
27
+ import Koloda
28
+
19
29
  import Alamofire
20
30
 
21
31
 
@@ -24,7 +34,7 @@
24
34
 
25
35
 
26
36
 
27
- fileprivate var jsonData: JsonData = JsonData(stat: "", info: JsonData.Info(photo_num: 1, photo: []) )
37
+ @IBOutlet var kolodaView: KolodaView!
28
38
 
29
39
 
30
40
 
@@ -32,25 +42,81 @@
32
42
 
33
43
  super.viewDidLoad()
34
44
 
35
-
45
+ kolodaView.dataSource = self
46
+
36
-
47
+ }
48
+
49
+
50
+
51
+ func getApiRequest() -> JsonData{
52
+
53
+ var returnJson: JsonData = JsonData(stat: "", info: JsonData.Info(photo_num: 1, photo: []) )
54
+
37
- let url = "https://api.photozou.jp/rest/search_public.json?type=photo&keyword=neko&limit=10&offset=1"
55
+ let url = "https://api.photozou.jp/rest/search_public.json"
38
-
56
+
39
- Alamofire.request(url).response { response in
57
+ guard var urlComponents = URLComponents(string: url) else {
58
+
40
-
59
+ print("Failed to make URLComponents Failed")
60
+
61
+ return returnJson
62
+
63
+ }
64
+
65
+ urlComponents.queryItems = [
66
+
67
+ URLQueryItem(name: "type", value: "photo"),
68
+
69
+ URLQueryItem(name: "keyword", value: "haruhi"),
70
+
71
+ URLQueryItem(name: "limit", value: "100"),
72
+
73
+ URLQueryItem(name: "offset", value: "1"),
74
+
75
+ ]
76
+
77
+ let task = URLSession.shared.dataTask(with: urlComponents.url!) { (data, response, error) in
78
+
41
- print("debug comment")
79
+ print("Debug Comment!")
42
-
80
+
43
- if let data = response.data {
81
+ guard let jsonData = data else {
44
-
45
- self.jsonData = try! JSONDecoder().decode(JsonData.self, from: data)
82
+
46
-
47
- print(self.jsonData)
83
+ print("Failed to make jsonData")
84
+
85
+ return
48
86
 
49
87
  }
50
88
 
89
+ do {
90
+
91
+ let jsonData = try JSONDecoder().decode(JsonData.self, from: jsonData)
92
+
93
+ print("Success to make jsonData")
94
+
95
+ print(jsonData)
96
+
97
+ print("self")
98
+
99
+ returnJson = jsonData
100
+
101
+ print(returnJson)
102
+
103
+ return
104
+
105
+ } catch {
106
+
107
+ print(error.localizedDescription)
108
+
109
+ }
110
+
51
111
  }
52
112
 
113
+ task.resume()
114
+
115
+ return returnJson
116
+
53
- }
117
+ }
118
+
119
+
54
120
 
55
121
  }
56
122
 
@@ -78,6 +144,58 @@
78
144
 
79
145
  }
80
146
 
147
+
148
+
149
+ extension ViewController: KolodaViewDataSource {
150
+
151
+ func kolodaNumberOfCards(_ koloda: KolodaView) -> Int {
152
+
153
+ return 10
154
+
155
+ }
156
+
157
+ func koloda(_ koloda: KolodaView, viewForCardAt index: Int) -> UIView {
158
+
159
+ let json: JsonData = getApiRequest()
160
+
161
+ let imageView = UIImageView()
162
+
163
+ if let image: String = json.info.photo[1].image_url {
164
+
165
+ let url = URL(string: image)
166
+
167
+ URLSession.shared.dataTask(with: url!, completionHandler: { (data, response, error) in
168
+
169
+ if error != nil {
170
+
171
+ print(error!)
172
+
173
+ return
174
+
175
+ }
176
+
177
+ DispatchQueue.main.async {
178
+
179
+ imageView.image = UIImage(data: data!)
180
+
181
+ }
182
+
183
+ }).resume()
184
+
185
+ }
186
+
187
+ let screenWidth:CGFloat = view.frame.size.width
188
+
189
+ let screenHeight:CGFloat = view.frame.size.height
190
+
191
+ imageView.center = CGPoint(x:screenWidth/2, y:screenHeight/2)
192
+
193
+ return imageView
194
+
195
+ }
196
+
197
+ }
198
+
81
199
  ```
82
200
 
83
201
 
@@ -86,9 +204,7 @@
86
204
 
87
205
 
88
206
 
89
- - 実機(iphoneX iOS12.1) でデバッグしましたが、デバッグコメントが表示されせんでした。
207
+ - 実機(iphoneX iOS12.1) でデバッグしましたが、上記のエラーになりました。
90
-
91
- - URLSession.shared.dataTask での実装も試しましたが、同様に関数が呼ばれませんでした。
92
208
 
93
209
 
94
210
 

1

試したことを追加しました。

2018/12/29 12:17

投稿

shuji_kiritani
shuji_kiritani

スコア13

test CHANGED
File without changes
test CHANGED
@@ -86,7 +86,9 @@
86
86
 
87
87
 
88
88
 
89
- 実機(iphoneX iOS12.1) でデバッグしましたが、デバッグコメントが表示されませんでした。
89
+ - 実機(iphoneX iOS12.1) でデバッグしましたが、デバッグコメントが表示されませんでした。
90
+
91
+ - URLSession.shared.dataTask での実装も試しましたが、同様に関数が呼ばれませんでした。
90
92
 
91
93
 
92
94