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

回答編集履歴

3

追記

2019/10/17 03:00

投稿

MasakiHori
MasakiHori

スコア3391

answer CHANGED
@@ -52,4 +52,18 @@
52
52
  という感じになります。
53
53
 
54
54
  ----
55
- 型名を変更/修正しました。
55
+ 型名を変更/修正しました。
56
+
57
+ ----
58
+ 追記(10/17)
59
+
60
+ ```swift
61
+ let response: Response = /// ここにデコードした値が入っているとします
62
+
63
+ switch response.result.response {
64
+ case let .result(responseData):
65
+ // データが取れたときの処理。 responseDataにXYsの値が入っている
66
+ case let .error(error):
67
+ // エラーの時の処理。 errorにStringの値が入っている
68
+ }
69
+ ```

2

修正

2019/10/17 03:00

投稿

MasakiHori
MasakiHori

スコア3391

answer CHANGED
@@ -5,37 +5,38 @@
5
5
  ```swift
6
6
 
7
7
  struct XY: Codable {
8
- let xxx: String
8
+ let xxx: String
9
- let yyy: String
9
+ let yyy: String
10
10
  }
11
11
 
12
12
  struct XYs: Codable {
13
- let data: [XY]
13
+ let data: [XY]
14
14
  }
15
15
 
16
16
  enum ResponseData: Decodable {
17
- case error(String)
17
+ case error(String)
18
- case data(Success)
18
+ case data(XYs)
19
-
19
+
20
- init(from decoder: Decoder) throws {
20
+ init(from decoder: Decoder) throws {
21
-
21
+
22
- self = try Result<ResponseData, Error> {
22
+ self = try Result<ResponseData, Error> {
23
- try .data(decoder.singleValueContainer().decode(XYs.self))
23
+ try .data(decoder.singleValueContainer().decode(XYs.self))
24
- }
24
+ }
25
- .flatMapError { _ in
25
+ .flatMapError { _ in
26
- Result { try .error(decoder.singleValueContainer().decode(String.self))
26
+ Result { try .error(decoder.singleValueContainer().decode(String.self)) }
27
- }
27
+ }
28
- .get()
28
+ .get()
29
+ }
29
30
  }
30
31
 
31
- struct Result: Decodable {
32
+ struct ResultData: Decodable {
32
- let message: String
33
+ let message: String
33
- let response: ResponseData
34
+ let response: ResponseData
34
- let status: String
35
+ let status: String
35
36
  }
36
37
 
37
38
  struct Response: Decodable {
38
- let result: Result
39
+ let result: ResultData
39
40
  }
40
41
 
41
42
  ```
@@ -48,4 +49,7 @@
48
49
  追記:
49
50
  内側にenumが入るのが嫌であれば[こんな感じ](https://teratail.com/questions/214733)にして一番外側をenumにする。
50
51
  それでもダメならdo-catchの入れ子を作って対処する。
51
- という感じになります。
52
+ という感じになります。
53
+
54
+ ----
55
+ 型名を変更/修正しました。

1

追記

2019/10/16 12:45

投稿

MasakiHori
MasakiHori

スコア3391

answer CHANGED
@@ -41,4 +41,11 @@
41
41
  ```
42
42
 
43
43
  コンパイルもしてないけど多分これで動きます。
44
- responseのところがenumになっているので、使うにはenumから取り出す必要があります。
44
+ responseのところがenumになっているので、使うにはenumから取り出す必要があります。
45
+
46
+
47
+ ----
48
+ 追記:
49
+ 内側にenumが入るのが嫌であれば[こんな感じ](https://teratail.com/questions/214733)にして一番外側をenumにする。
50
+ それでもダメならdo-catchの入れ子を作って対処する。
51
+ という感じになります。