回答編集履歴

3

追記

2019/10/17 03:00

投稿

MasakiHori
MasakiHori

スコア3391

test CHANGED
@@ -107,3 +107,31 @@
107
107
  ----
108
108
 
109
109
  型名を変更/修正しました。
110
+
111
+
112
+
113
+ ----
114
+
115
+ 追記(10/17)
116
+
117
+
118
+
119
+ ```swift
120
+
121
+ let response: Response = /// ここにデコードした値が入っているとします
122
+
123
+
124
+
125
+ switch response.result.response {
126
+
127
+ case let .result(responseData):
128
+
129
+ // データが取れたときの処理。 responseDataにXYsの値が入っている
130
+
131
+ case let .error(error):
132
+
133
+ // エラーの時の処理。 errorにStringの値が入っている
134
+
135
+ }
136
+
137
+ ```

2

修正

2019/10/17 03:00

投稿

MasakiHori
MasakiHori

スコア3391

test CHANGED
@@ -12,9 +12,9 @@
12
12
 
13
13
  struct XY: Codable {
14
14
 
15
- let xxx: String
15
+ let xxx: String
16
16
 
17
- let yyy: String
17
+ let yyy: String
18
18
 
19
19
  }
20
20
 
@@ -22,7 +22,7 @@
22
22
 
23
23
  struct XYs: Codable {
24
24
 
25
- let data: [XY]
25
+ let data: [XY]
26
26
 
27
27
  }
28
28
 
@@ -30,41 +30,43 @@
30
30
 
31
31
  enum ResponseData: Decodable {
32
32
 
33
- case error(String)
33
+ case error(String)
34
34
 
35
- case data(Success)
35
+ case data(XYs)
36
36
 
37
-
37
+
38
38
 
39
- init(from decoder: Decoder) throws {
39
+ init(from decoder: Decoder) throws {
40
40
 
41
-
41
+
42
42
 
43
- self = try Result<ResponseData, Error> {
43
+ self = try Result<ResponseData, Error> {
44
44
 
45
- try .data(decoder.singleValueContainer().decode(XYs.self))
45
+ try .data(decoder.singleValueContainer().decode(XYs.self))
46
46
 
47
- }
47
+ }
48
48
 
49
- .flatMapError { _ in
49
+ .flatMapError { _ in
50
50
 
51
- Result { try .error(decoder.singleValueContainer().decode(String.self))
51
+ Result { try .error(decoder.singleValueContainer().decode(String.self)) }
52
52
 
53
- }
53
+ }
54
54
 
55
- .get()
55
+ .get()
56
+
57
+ }
56
58
 
57
59
  }
58
60
 
59
61
 
60
62
 
61
- struct Result: Decodable {
63
+ struct ResultData: Decodable {
62
64
 
63
- let message: String
65
+ let message: String
64
66
 
65
- let response: ResponseData
67
+ let response: ResponseData
66
68
 
67
- let status: String
69
+ let status: String
68
70
 
69
71
  }
70
72
 
@@ -72,7 +74,7 @@
72
74
 
73
75
  struct Response: Decodable {
74
76
 
75
- let result: Result
77
+ let result: ResultData
76
78
 
77
79
  }
78
80
 
@@ -99,3 +101,9 @@
99
101
  それでもダメならdo-catchの入れ子を作って対処する。
100
102
 
101
103
  という感じになります。
104
+
105
+
106
+
107
+ ----
108
+
109
+ 型名を変更/修正しました。

1

追記

2019/10/16 12:45

投稿

MasakiHori
MasakiHori

スコア3391

test CHANGED
@@ -85,3 +85,17 @@
85
85
  コンパイルもしてないけど多分これで動きます。
86
86
 
87
87
  responseのところがenumになっているので、使うにはenumから取り出す必要があります。
88
+
89
+
90
+
91
+
92
+
93
+ ----
94
+
95
+ 追記:
96
+
97
+ 内側にenumが入るのが嫌であれば[こんな感じ](https://teratail.com/questions/214733)にして一番外側をenumにする。
98
+
99
+ それでもダメならdo-catchの入れ子を作って対処する。
100
+
101
+ という感じになります。