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

質問編集履歴

2

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

2018/12/29 12:17

投稿

shuji_kiritani
shuji_kiritani

スコア13

title CHANGED
File without changes
body CHANGED
@@ -1,30 +1,63 @@
1
1
  ### 前提・実現したいこと
2
2
 
3
- swift4.2 で WebAPI を叩いて Json を取得したいですが、うまくいきません
3
+ swift4.2 で WebAPI を叩いて Json を取得し、その Json から画像の URL を抽出して Koloda の View に追加したいです。
4
+ しかし、Json データの中身がうまく入っていないみたいで、
5
+ "if let image: String = json.info.photo[1].image_url {"
6
+ 上記の行で index out of range になってしまいます。
4
- どうやら関数自体実行されていないようなのですが、原因が分かればご教授頂けると幸いです。
7
+ URLSession.shared.dataTask 呼ばれていないような挙動に見えるのですが、解決方法が分かればご教授頂けると助かります。
8
+ よろしくお願いいたします。
5
9
 
6
10
  ### 該当のソースコード
7
11
 
8
12
  ```swift
9
13
  import UIKit
14
+ import Koloda
10
15
  import Alamofire
11
16
 
12
17
  class ViewController: UIViewController {
13
18
 
14
- fileprivate var jsonData: JsonData = JsonData(stat: "", info: JsonData.Info(photo_num: 1, photo: []) )
19
+ @IBOutlet var kolodaView: KolodaView!
15
20
 
16
21
  override func viewDidLoad() {
17
22
  super.viewDidLoad()
18
-
23
+ kolodaView.dataSource = self
24
+ }
25
+
26
+ func getApiRequest() -> JsonData{
27
+ var returnJson: JsonData = JsonData(stat: "", info: JsonData.Info(photo_num: 1, photo: []) )
19
- let url = "https://api.photozou.jp/rest/search_public.json?type=photo&keyword=neko&limit=10&offset=1"
28
+ let url = "https://api.photozou.jp/rest/search_public.json"
20
- Alamofire.request(url).response { response in
29
+ guard var urlComponents = URLComponents(string: url) else {
30
+ print("Failed to make URLComponents Failed")
31
+ return returnJson
32
+ }
33
+ urlComponents.queryItems = [
34
+ URLQueryItem(name: "type", value: "photo"),
35
+ URLQueryItem(name: "keyword", value: "haruhi"),
36
+ URLQueryItem(name: "limit", value: "100"),
37
+ URLQueryItem(name: "offset", value: "1"),
38
+ ]
39
+ let task = URLSession.shared.dataTask(with: urlComponents.url!) { (data, response, error) in
21
- print("debug comment")
40
+ print("Debug Comment!")
22
- if let data = response.data {
41
+ guard let jsonData = data else {
23
- self.jsonData = try! JSONDecoder().decode(JsonData.self, from: data)
24
- print(self.jsonData)
42
+ print("Failed to make jsonData")
43
+ return
25
44
  }
45
+ do {
46
+ let jsonData = try JSONDecoder().decode(JsonData.self, from: jsonData)
47
+ print("Success to make jsonData")
48
+ print(jsonData)
49
+ print("self")
50
+ returnJson = jsonData
51
+ print(returnJson)
52
+ return
53
+ } catch {
54
+ print(error.localizedDescription)
55
+ }
26
56
  }
57
+ task.resume()
58
+ return returnJson
27
59
  }
60
+
28
61
  }
29
62
 
30
63
  struct JsonData : Codable{
@@ -38,12 +71,37 @@
38
71
  var image_url : String
39
72
  }
40
73
  }
74
+
75
+ extension ViewController: KolodaViewDataSource {
76
+ func kolodaNumberOfCards(_ koloda: KolodaView) -> Int {
77
+ return 10
78
+ }
79
+ func koloda(_ koloda: KolodaView, viewForCardAt index: Int) -> UIView {
80
+ let json: JsonData = getApiRequest()
81
+ let imageView = UIImageView()
82
+ if let image: String = json.info.photo[1].image_url {
83
+ let url = URL(string: image)
84
+ URLSession.shared.dataTask(with: url!, completionHandler: { (data, response, error) in
85
+ if error != nil {
86
+ print(error!)
87
+ return
88
+ }
89
+ DispatchQueue.main.async {
90
+ imageView.image = UIImage(data: data!)
91
+ }
92
+ }).resume()
93
+ }
94
+ let screenWidth:CGFloat = view.frame.size.width
95
+ let screenHeight:CGFloat = view.frame.size.height
96
+ imageView.center = CGPoint(x:screenWidth/2, y:screenHeight/2)
97
+ return imageView
98
+ }
99
+ }
41
100
  ```
42
101
 
43
102
  ### 試したこと
44
103
 
45
- - 実機(iphoneX iOS12.1) でデバッグしましたが、デバッグコメントが表示されせんでした。
104
+ - 実機(iphoneX iOS12.1) でデバッグしましたが、上記のエラーになりました。
46
- - URLSession.shared.dataTask での実装も試しましたが、同様に関数が呼ばれませんでした。
47
105
 
48
106
  ### 補足情報(FW/ツールのバージョンなど)
49
107
 

1

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

2018/12/29 12:17

投稿

shuji_kiritani
shuji_kiritani

スコア13

title CHANGED
File without changes
body CHANGED
@@ -42,7 +42,8 @@
42
42
 
43
43
  ### 試したこと
44
44
 
45
- 実機(iphoneX iOS12.1) でデバッグしましたが、デバッグコメントが表示されませんでした。
45
+ - 実機(iphoneX iOS12.1) でデバッグしましたが、デバッグコメントが表示されませんでした。
46
+ - URLSession.shared.dataTask での実装も試しましたが、同様に関数が呼ばれませんでした。
46
47
 
47
48
  ### 補足情報(FW/ツールのバージョンなど)
48
49