iOS API JSON Parsing(気象API)の実行



これは前の文章の内容とつながっている文章です.
下一篇文章:iOS API JSONデータのインポート(気象API)

JSONパーティションの試行



さあ.こうしてJSON情報を引き寄せてきました
しかし、それをしても内容が読めず、今のようにアプリケーションで出力することはできません.だから、そこから情報を集めるべきだ.
これに先立ちtask部分を後続モジュールに変更し,この方法は前回のステップ4からなる.モジュールは、関数を作成することなく関数を実行できる機能です.
まだ知りたいなら、Closuresを確認してください.
func performRequest(urlString: String) {
        . . . [원래 코드와 동일하므로 생략]
            
            // 후행 클로저로 선언한 completionHandler
            let task = session.dataTask(with: url) { data, response, error in
                if error != nil {
                    print(error!)
                    return
                }
                
                // 에러가 발생하지 않았다면 if let 구문으로 들어와 data(옵셔널 데이터)를 언래핑 하게 된다.
                // data는 문자열로 쉽게 출력할 수 있다.
                if let safeData = data {
                    // 언래핑 된 data를 전송한다.
                    // 클로저 내부에서 다른 클로저를 실행하는 경우 self를 추가해야 한다.
                    self.parseJSON(weatherData: safeData)
                }
            }
            . . .
        }
    }
末端に位置するperformRequest()も実現される.
func parseJSON(weatherData: Data) {
    let decoder = JSONDecoder()
        do {
            let decodedData = try decoder.decode(WeatherData.self, from: weatherData)
            
            
            print(decodedData.weather[0].description)
        } catch {
            print(error)
        }
    }

JSONDecoder

let decoder = JSONDecoder()
JSOnDecoder()メソッドを使用してJSONを復号できます.
復号はSWIFT形式でJSONファイルを使用する方法です.

decode

do {
    let decodedData = try decoder.decode(WeatherData.self, from: weatherData)
    print(decodedData.weather[0].description)
    } catch {
        print(error)
    }
type:デコーダプロトコルに適合する復号のタイプ
WeatherDataとすべてのタイプを指定するにはselfが必要です.
decode自体はthrowsを使用しているので、試してみる必要があります.
また、エラーを防止するためにdo-catch構文を使用することもできます.
また、定数であるparseJSON()decodedDataとして指定されている.
したがって、WeatherDataに存在する変数、定数、関数等を用いることができる.
つまり,復号化のためには構造体をJSONファイルのように組織する必要がある.

WeatherData


SWIFTファイルを個別にマイニングしたい.
struct WeatherData: Decodable {
    let name: String
    let main: Main
    let weather: [Weather]
}
// JSON에서 제공하는 이름 그대로 작성해줘야 한다.
struct Main: Decodable{
    let temp: Double
}


struct Weather: Decodable {
    let description: String
}
構造体の横にあるDecodableは、自動的にJSON式に変換して復号できるプロトコルです.
JSONファイル中のオブジェクトに従い,必要なもののみを抽出して構造体を構成した.
このようにしてアプリケーションを構築すると
(現在のprintはdescription値)
こうしてJSON内に表示されているものが出力されます.
そのままJSON内に情報を出力してみます.
以降の情報はLabelに自分で追加して適用してほしい.