iOS&Swift-Parsing JSONの勉強


友達と簡単なTodoアプリを作ることにしました.友人はバックグラウンドを担当し、iOS全体の開発を担当しています.私は初心者なので、すべてのことはYouTubeを見て行わなければなりません.
Todoアプリケーションを作成するにはDBと通信する必要があり、各種情報(ex.やるべきこと、description、日付など)を受信してJSON objectとしてswift処理する必要があるのですが、これはしないので講義を探しました.

幸いなことに、ColdWithChrisというYoutuberが親切に説明してくれたので、私は順番についていくことができました.

まずはnewsapiorgのAPIを使って練習しました.
写真の下にリンクがあり、事前にコピーしておきます.

下にスクロールすると、写真のようにJSONデータが表示されます.status、totalResults、articles、articlesには、さまざまなデータが再ネストされていることがわかります.
SwiftでJSONデータをパーティション化するには、まずマッピングするデータを構造体として宣言する必要があります.

任意NewsFeed.プロジェクトにswiftという名前のファイルを個別に作成します.
構造体は元の宣言方式で宣言するが,Codableというプロトコルを用いるべきである.まだ分かりませんが、JSONデータを簡単に復号したいなら、利用したほうがいいです.
struct NewsFeed: Codable{
	var status : String = ""
    	var totalResults : Int = 0
    	var articles:[Article]?
}
先に構造体を宣言します.0のような初期値を与えてもよいし、外部変数に設定してもよい.
特に、vararticle:[Article]?『アートスタイル』を書いたように、レイアウトに別途アーティクルタイプを決めました.これは下を見ると少し簡単です.

写真のようにarticles鍵にはJSONデータも大量に格納されている.
これらのデータをマッピングするには、別のsweetファイルを作成する必要があります.

Article.swiftという名前のファイルが作成されました.ここでは大まかに上図のように構造体を宣言すべきである.同様に、Codableというプロトコルを使用する必要があります.(外部変数として設定)
struct Article: Codable{
    
    var author:String?
    var title:String?
    var description:String?
    var url:String?
    var urlToImage:String?
    var publishedAt:String?
    var content:String?
    
}
次はViewControllerです.swiftファイルです.
import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        
        //Hit the API endpoint
        let urlString = "http://newsapi.org/v2/everything?q=bitcoin&from=2020-11-29&sortBy=publishedAt&apiKey=ad476a2319b24e7191a7d845537b9f1f"
        
        //turning the string into a URL object
        //URL() may return a nil, so we need a guard statement so it doesn't
        let url = URL(string: urlString)
        
        guard url != nil else{
            return
        }
        
        let session = URLSession.shared
        
        let dataTask = session.dataTask(with: url!) { (data,response,error) in
            
            //Check that there are no errors and that data exists
            if error == nil && data != nil {
                
                //Parse JSON
                let decoder = JSONDecoder()
                
                do{
                 
                    let newsFeed = try decoder.decode(NewsFeed.self, from: data!)
                
                    print(newsFeed)
                }
                catch{
                    print("Error in JSON parsing")
                }
            }
            
        }
        
        //Make the API Call
        dataTask.resume()
        
    }


}
大まかなコードは以下の通りです.
 let urlString = "http://newsapi.org/v2/everything?q=bitcoin&from=2020-11-29&sortBy=publishedAt&apiKey=ad476a2319b24e7191a7d845537b9f1f"
 let url = URL(string: urlString)
urlオブジェクトのコードを生成します.
let dataTask = session.dataTask(with: url!) { (data,response,error) in
            
            //Check that there are no errors and that data exists
            if error == nil && data != nil {
                
                //Parse JSON
                let decoder = JSONDecoder()
                
                do{
                 
                    let newsFeed = try decoder.decode(NewsFeed.self, from: data!)
                
                    print(newsFeed)
                }
                catch{
                    print("Error in JSON parsing")
                }
            }
            
        }
初心者として、私はまだこの点を完全に理解していません.いずれにしても、JSOndeCODERを利用して正常なグループを作ることを学びました.
decoder変数を使用し、前に定義したNewsFeedを使用します.swiftファイルを使用して復号を定義します.
この状態でprint(newsFeed)セクションにブレークポイントを掛け、コンソールウィンドウにpo newsFeedを入力すると、次の情報が表示されます.

左に示すように、データ、応答などの情報の値は正常に割り当てられています.右側にJSONデータがパケット化されているのが見えます.
まず、今日はそのような方法でインポートしたデータを確認するだけでなく、実際のアプリケーションで追加インポートを使用する方法も学びました.より詳細な説明は、以降の位置決めで続行します.