質問編集履歴

1

書式の改善

2020/06/26 06:15

投稿

diamons
diamons

スコア7

test CHANGED
File without changes
test CHANGED
@@ -1,233 +1,9 @@
1
1
  このエラーの解決法がわかりません。教本通りに進めていたのですがここでエラーが出てしまい進めなくなってしまいました。どなたかわかる方いましたらお願いいたします。
2
2
 
3
- ---------------------------------------------------------------------------```SWIFT5,XCODE11.5
3
+ --------------------------------------------------------------------------
4
4
 
5
- import UIKit
5
+ ![イメージ説明](a58548157f2d10eedb401579059a6b0d.png)
6
6
 
7
+ ![イメージ説明](e2985a9139959553039633ab8a409e02.png)
7
8
 
8
-
9
- class ViewController: UIViewController, UISearchBarDelegate {
10
-
11
-
12
-
13
- override func viewDidLoad() {
14
-
15
- super.viewDidLoad()
16
-
17
- // Do any additional setup after loading the view.
18
-
19
-
20
-
21
- //Search Bar のdelegate通知先を設定
22
-
23
- searchText.delegate = self
24
-
25
- //入力のヒントとなる、プレースホルダーを設定
26
-
27
- searchText.placeholder = "お菓子の名前を入力してください"
28
-
29
-
30
-
31
- }
32
-
33
-
34
-
35
-
36
-
37
- @IBOutlet weak var searchText: UISearchBar!
38
-
39
-
40
-
41
- @IBOutlet weak var tableView: UITableView!
42
-
43
-
44
-
45
- //お菓子のリスト(タプル配列)
46
-
47
- var okashiList : [(name:String , maker:String , link:URL , image:URL)] = []
48
-
49
-
50
-
51
-
52
-
53
- //検索ボタンをクリック時
54
-
55
- func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
56
-
57
- //キーボードを閉じる
58
-
59
- view.endEditing(true)
60
-
61
-
62
-
63
- if let searchWord = searchBar.text {
64
-
65
- //デバックエリアに出力
66
-
67
- print(searchWord)
68
-
69
- //入力されていたらお菓子を検索
70
-
71
- searchOkashi(keyword: searchWord)
72
-
73
- }
74
-
75
- }
76
-
77
- //JSONのitem内のデータ構造
78
-
79
- struct ItemJson : Codable {
80
-
81
- //お菓子の名称
82
-
83
- let name: String?
84
-
85
- //メーカー
86
-
87
- let maker : String?
88
-
89
- //掲載URL
90
-
91
- let url : URL?
92
-
93
- //画像URL
94
-
95
- let image : URL?
96
-
97
-
98
-
99
- }
100
-
101
-
102
-
103
- //JSONのデータ構造
104
-
105
- struct ResultJson : Codable {
106
-
107
- //複数要素
108
-
109
- let item :[ItemJson?]
110
-
111
- }
112
-
113
- //searchOkashiメソッド
114
-
115
- //第一引数 : keyword 検索したいワード
116
-
117
- func searchOkashi(keyword : String){
118
-
119
- //お菓子の検索キーワードをURLエンコードする
120
-
121
- guard let keyword_encode = keyword.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else {
122
-
123
- return
124
-
125
- }
126
-
127
-
128
-
129
-
130
-
131
- // リクエストURLの組み立て
132
-
133
- guard let req_url = URL(string: "https://sysbird.jp/toriko/api/?apikey=guest&format=json&keyword=(keyword_encode)&max=10&order=r") else {
134
-
135
- return
136
-
137
- }
138
-
139
- print(req_url)
140
-
141
-
142
-
143
- //リクエストに必要な情報を生成
144
-
145
- let req = URLRequest(url: req_url)
146
-
147
- //データ転送を管理するためのセッションを生成
148
-
149
- let session = URLSession(configuration: .default, delegate: nil, delegateQueue: OperationQueue.main)
150
-
151
- //リクエストをタスクとして登録
152
-
153
- let task = session.dataTask(with: req, completionHandler: {
154
-
155
- (data , response , error) in
156
-
157
- //セッションを終了
158
-
159
- session.finishTasksAndInvalidate()
160
-
161
- // do try catch エラーハンドリング
162
-
163
- do {
164
-
165
- //JSONDecoderのインスタンス取得
166
-
167
- let decoder = JSONDecoder()
168
-
169
- //受け取ったJSONデータをパース(解析)して格納
170
-
171
- let json = try decoder.decode(ResultJson.self,from:data!)
172
-
173
-
174
-
175
- //お菓子の情報が取得できているか確認
176
-
177
- <<<<<<<if let items = json.item {>>>>>ここでタイトルのエラーが出ます
178
-
179
- //取得しているお菓子の数だけ処理
180
-
181
- for item in items {
182
-
183
- //お菓子の名称、メーカー名、掲載URL, 画像URLをアンラップ
184
-
185
- if let name = item.name , let maker = item.maker , let link = item.url , let image = item.image{
186
-
187
- //一つのお菓子をタプルでまとめて管理
188
-
189
- let okashi = (name,maker,link,image)
190
-
191
- //お菓子の配列へ追加
192
-
193
- self.okashiList.append(okashi)
194
-
195
- }
196
-
197
- }
198
-
199
- if let okashidbg = self.okashiList.first{
200
-
201
- print("----------------")
202
-
203
- print("okashiList[0] = (okashidbg)")
9
+ ![イメージ説明](e17a1e849813c180295fac94e759e31b.png)
204
-
205
- }
206
-
207
- }
208
-
209
- } catch {
210
-
211
- //エラー処理
212
-
213
- print("エラーが出ました")
214
-
215
- }
216
-
217
-
218
-
219
- })
220
-
221
- //ダウンロードの開始
222
-
223
- task.resume()
224
-
225
-
226
-
227
- }
228
-
229
- }
230
-
231
-
232
-
233
- ```