前回, サーバにJSONデータをリクエストしてAppで活用する方法を紹介しました. 今回は仕上げとして作成したAPIAccessorのブラッシュアップを行います.
- 前回のコードに続けて書く
- APIAccessor.requestPhotos()のエラー処理を行う
- do { … } catch { … } をつかう. try! を try に置き換えて例外を拾う
- JSONDecoder().decode に guard letをつかう
- try! は try? に変更する
- try? は異常時に例外の代わりにnilを返す. guardなどで判定できるようになる
コード1#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
import Foundation
class APIAccessor {
static func requestPhotos() async -> [PhotoData] {
let api_photos = "https://archive.wdkk.co.jp/sf-swiftui/api/photos/"
guard let url = URL( string:api_photos ) else {
print( "URLが正しくありません" )
return []
}
let request = URLRequest( url:url )
do {
let result = try await URLSession.shared.data(for: request )
guard let json = try? JSONDecoder().decode( [PhotoData].self, from:result.0 ) else {
print( "JSONを正しく変換できませんでした" )
return []
}
return json
}
catch {
print( "データの取得に失敗しました" )
return []
}
}
}
|
画面の結果は変わりませんが, サーバアクセスに失敗したりしたときコンソールにエラーが出力され, 動作しない原因が分かりやすくなりました. ためしにネットワークやデータ通信をOFFにしてAppを実行してみてください. ネットが繋がっていないのでサーバに接続できません.この場合「データの取得に失敗しました」とコンソールが出て, リストは空っぽになります.