質問は2点です。
## ① as? [String: Any] は、何故ダウンキャストなのか。
以下の記事によると、「より具体的な型」にするのがダウンキャスト(?
, !
)と書かれていますが、
- JSON解析にて
as? [String: Any]
は、何故ダウンキャストなのか、教えて頂きたいです。
【Swift入門 文法編】型キャスト(as, as!, as?)をマスターしよう
-
JSONデータには、整数や文字列など様々な型が混ぜっているから
Any
にキャストする、という認識で合っていますか? -
もしそうなら、「より汎用的な型」にするアップキャストは何故使わないの? と思ってしまいました。
## ② キャストをしなくても、JSONデータが同じ?
swift
1guard let jsonAny = json as? [String: Any] else { return }
キャストをせずにprint(json)
を実行しても、同じJSONデータが得られました。
何故キャストは必要なのでしょうか。
StarWarsApi
1{ 2 "birth_year" = 19BBY; 3 created = "2014-12-09T13:50:51.644000Z"; 4 edited = "2014-12-20T21:17:56.891000Z"; 5 "eye_color" = blue; 6 films = ( 7 "http://swapi.dev/api/films/1/", 8 "http://swapi.dev/api/films/2/", 9 "http://swapi.dev/api/films/3/", 10 "http://swapi.dev/api/films/6/" 11 ); 12 gender = male; 13 "hair_color" = blond; 14 height = 172; 15 homeworld = "http://swapi.dev/api/planets/1/"; 16 mass = 77; 17 name = "Luke Skywalker"; 18 "skin_color" = fair; 19 species = ( 20 ); 21 starships = ( 22 "http://swapi.dev/api/starships/12/", 23 "http://swapi.dev/api/starships/22/" 24 ); 25 url = "http://swapi.dev/api/people/1/"; 26 vehicles = ( 27 "http://swapi.dev/api/vehicles/14/", 28 "http://swapi.dev/api/vehicles/30/" 29 ); 30} 31
## コード
swift
1 do { 2 let json = try JSONSerialization.jsonObject(with: data, options: []) 3 guard let jsonAny = json as? [String: Any] else { return } 4 print(json) 5 6 } catch { 7 debugPrint(error.localizedDescription) 8 return 9 }
質問は以上です。
お時間あるときに、ご返信頂けましたら幸いです????
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。