質問編集履歴

4

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

2018/10/30 14:05

投稿

hodoru3sei
hodoru3sei

スコア284

test CHANGED
File without changes
test CHANGED
@@ -153,3 +153,91 @@
153
153
 
154
154
 
155
155
  ```
156
+
157
+
158
+
159
+
160
+
161
+ ### ※追記10/30
162
+
163
+ クロージャについて完璧には理解できていないと思いますが[Swiftのクロージャについて整理してみた。](https://qiita.com/pei0804/items/9bd935ac6832cd07ffd2)という記事を参考にして、真似して実装を行なってみました。
164
+
165
+ ですが、wetherの値を確認するためにprintの部分にブレイクポイントを貼って値が入っているかを確認したのですが,しゅとくできておらずnullになってしまっていました
166
+
167
+ ```Swift
168
+
169
+ class RainChecker: Any{
170
+
171
+ private let openWetherMapAPI = "https://api.openweathermap.org/data/2.5/weather?q=Hachioji&appid=568cc88fc88a619182325a1338854669"
172
+
173
+
174
+
175
+ func judgeWether() -> Bool{
176
+
177
+
178
+
179
+ var wether:Root?
180
+
181
+ getJsonData{(jsonData) in wether = jsonData}
182
+
183
+ // if let data = wether{
184
+
185
+ // if(data.weather[0].main == "Rain"){
186
+
187
+ // print(data.weather[0].main)
188
+
189
+ // return true
190
+
191
+ // }
192
+
193
+ // }
194
+
195
+ // print("jsonData:(wether?.weather[0].main)")
196
+
197
+ // return false
198
+
199
+ print(wether)
200
+
201
+ return true
202
+
203
+ }
204
+
205
+ func getJsonData(wetherData:@escaping (_ response: Root)->Void){
206
+
207
+ let url = URL(string: openWetherMapAPI)!
208
+
209
+ let request = URLRequest(url: url)
210
+
211
+
212
+
213
+
214
+
215
+ var task = URLSession.shared.dataTask(with: request){(data, response, error) in
216
+
217
+ guard let data = data else{return}
218
+
219
+ do{
220
+
221
+ let jsonData = try JSONDecoder().decode(Root.self, from: data)
222
+
223
+ wetherData(jsonData)
224
+
225
+ } catch let e{
226
+
227
+ print(e)
228
+
229
+ }
230
+
231
+
232
+
233
+ }
234
+
235
+ task.resume()
236
+
237
+ }
238
+
239
+ }
240
+
241
+
242
+
243
+ ```

3

タグの追加

2018/10/30 14:05

投稿

hodoru3sei
hodoru3sei

スコア284

test CHANGED
File without changes
test CHANGED
File without changes

2

書式の修正

2018/10/27 09:59

投稿

hodoru3sei
hodoru3sei

スコア284

test CHANGED
@@ -1 +1 @@
1
- 非同期処理終了時に処理実行したい
1
+ 非同期処理終了を取得したい
test CHANGED
@@ -86,9 +86,11 @@
86
86
 
87
87
  ### ※追記
88
88
 
89
+ クロージャの中でやればいいんじゃないかという意見をいただいたので追記します。
90
+
89
91
  データを取得する部分だけ別クラスにしようと考えています。
90
92
 
91
- 雨かを判定して雨の時だけアプリの挙動を変えようと思っています
93
+ 雨かを判定して雨の時だけアプリの挙動を変えようと思っています。クロージャの中でreturnをしても元の関数を抜けることができないので非同期処理の終了を検知したいと考えました。
92
94
 
93
95
  ```Swift
94
96
 

1

コードの追記

2018/10/27 09:57

投稿

hodoru3sei
hodoru3sei

スコア284

test CHANGED
File without changes
test CHANGED
@@ -81,3 +81,73 @@
81
81
 
82
82
 
83
83
  処理の完了はどのように検知すれば良いのでしょうか
84
+
85
+
86
+
87
+ ### ※追記
88
+
89
+ データを取得する部分だけ別クラスにしようと考えています。
90
+
91
+ 雨かを判定して雨の時だけアプリの挙動を変えようと思っています
92
+
93
+ ```Swift
94
+
95
+ class WetherClient: UIView {
96
+
97
+ private let openWetherMapAPI = "https://api.openweathermap.org/data/2.5/weather?q=Hachioji&appid=568cc88fc88a619182325a1338854669"
98
+
99
+ private var wether:Root!
100
+
101
+
102
+
103
+ func judgeWether() -> Bool{
104
+
105
+ let url = URL(string: openWetherMapAPI)!
106
+
107
+ let request = URLRequest(url: url)
108
+
109
+ var task = URLSession.shared.dataTask(with: request){(data, response, error) in
110
+
111
+ guard let data = data else{return}
112
+
113
+ do{
114
+
115
+ let jsonData = try JSONDecoder().decode(Root.self, from: data)
116
+
117
+ print(jsonData.weather[0].main)
118
+
119
+ self.wether = jsonData
120
+
121
+ } catch let e{
122
+
123
+ print(e)
124
+
125
+ }
126
+
127
+ }
128
+
129
+ task.resume()
130
+
131
+ if let data = wether{
132
+
133
+ if(data.weather[0].main == "Rain"){
134
+
135
+ print(data.weather[0].main)
136
+
137
+ return true
138
+
139
+ }
140
+
141
+ }
142
+
143
+ print("jsonData:(wether.weather[0].main)")
144
+
145
+ return false
146
+
147
+ }
148
+
149
+ }
150
+
151
+
152
+
153
+ ```