私はこれが他の質問でカバーされていることを知っていますが、私はそれらに続き、私はまだ困惑しています。 JSONの構造は次のとおりです。Swift 4 JSON Decoder
{
"FindBoatResult": {
"num_boats": 10,
"boat": [
{
"num_segments": 1,
"segments": [
{
"ident": "String",
"origin" : {
"code" : "String"
},
},
]
}
などですが、それは構造のように深くなります。各JSONレスポンスに複数の "セグメント"が返されます。 Swiftにはこのコードがあります。
struct Result : Decodable {
let FindBoatResult : FindBoatResult
}
struct FindBoatResult : Decodable {
let boats : Boats
let num_boats : Int
}
struct Boats : Decodable {
let segments : [Segments]
}
struct Segments : Decodable {
let ident : String?
let origin : Origin
}
struct Origin : Decodable {
let code : String
}
func getBoats() {
let urlString = "http://myApi"
guard let url = URL(string: urlString) else { return }
URLSession.shared.dataTask(with: url) { (data, response, err) in
guard let data = data else {return}
let dataAsString = String(data: data, encoding: .utf8)
//print(dataAsString)
do {
let boats = try
JSONDecoder().decode(FindBoatResult.self, from: data)
print(boats)
} catch {
print(err)
}
}.resume()
}
これは失敗し、エラーが発生しましたが、エラーが発生しました。何も表示されません。 dataAsStringはJSONを期待どおりに出力します。したがって、「データ」は良好です。
エラーを 'print(error)' –
...として出力するか、 'dataTask'で渡されたエラーの混乱を避けるために、一意の名前を付けます。 'do {...} catchは、parseError {print(parseError)}'をキャッチします。 – Rob