プロジェクトC.Weatherを直接作成します.


JSONデコード


countries.復号jsonファイル
decoder.keyDecodingStrategy = .convertFromSnakeCase
decoder.keyDecodengStrategyを指定すると、codingKey宣言を使用することなく、snake-caseデータをcamel-caseに復号できると判断できます.

CodingKey


https://developer.apple.com/documentation/foundation/archives_and_serialization/encoding_and_decoding_custom_types protocol CodingKey符号化および復号化のための鍵プロトコル
コーデック可能(Encodable&Decodable)プロトコルを使用して符号化または復号するには、jsonファイルのプロトコルと変数名が一致する必要があります.
CodingKeyという名前のenumはCodingKeyプロトコルを採用しており、case 사용자지정문자열 = "프로퍼티"と指定されている場合は、自分の希望する文字列を使用してプロトコルを符号化または復号化することができる.
struct Landmark: Codable {
    var name: String
    var foundingYear: Int
    var location: Coordinate
    var vantagePoints: [Coordinate]
    
    enum CodingKeys: String, CodingKey {
        case name = "title"
        case foundingYear = "founding_date"
        
        case location
        case vantagePoints
    }
}
Enum... これは...を過ぎて🤯???

JSONDecoder


https://developer.apple.com/documentation/foundation/jsondecoder/ class JSONDecoder
struct GroceryProduct: Codable {
    var name: String
    var points: Int
    var description: String?
}

let json = """
{
    "name": "Durian",
    "points": 600,
    "description": "A fruit with a distinctive scent."
}
""".data(using: .utf8)!

let decoder = JSONDecoder()
let product = try decoder.decode(GroceryProduct.self, from: json)

print(product.name) // Prints "Durian"
誤り
The data couldn’t be read because it isn’t in the correct format.
質問コード:jsonDecoder.decode(Countries.self, from: dataAsset.data)
ソリューション:jsonDecoder.decode( [Countries] .self, from: dataAsset.data)
誤り
Type 'Countries' does not conform to protocol 'Decodable'
コピー可能な継承を受け取りましたが、なぜそうなるのか考えています.
間違えました.
Enumのcaseの部分は上記で宣言した文字列とは異なるので発生します

NSDataAsset


リソースディレクトリの国.jsonファイルデータをインポートするクラス
https://developer.apple.com/documentation/uikit/nsdataasset/ class NSDataAsset : NSObjecリソースディレクトリに格納されているデータにアクセスするクラス
データproperty(プロパティ)はNSDataなので、これを使います.
  • バイトタイプなので、必要なデータ型をインポートするにはXMLParserを使用する必要があります.
  • 表ビュー


    table viewを描くには
    UITableViewDataSourceとUITableViewDelegateの違いがわかりません!
    なんだっけ!
    もちろん知りません!私は今探しに行きます!🤣

    UITableViewDelegate

    protocol UITableViewDelegate次の問題を処理したい場合は、このプロトコルの方法を使用します.
  • ヘッダー、フッターの生成時(ヘッダーとフッターの構成、セルの削除と並べ替え)
  • 行、ヘッダー、フッターの高さは
  • に調整できます.
  • テープビューの高さを測定してより良いスクロールを作成する場合
  • 行の内容を書き込みまたは編集する場合:
  • 応答
  • 行選択(管理選択)
  • 行応答swipeと同様の動作(table viewで他の動作を実行)
  • .
    table view全体の構造を作成時に使用する依頼として表示します.
    実現しなければならない方法はありません!

    NSIndexPath

    class NSIndexPath : NSObjectIndexPathというものもあり、特にFoundationフレームワーク(Table ViewまたはCollection View)でNSIndexPathを使用する.
    tableviewに表示される数行目に使用します.

    セクションヘッダ部のROW値はN/A、0からカウント

    IndexPathは、ツリー構造で目的地に到達する経路を表す.
    上図ではindex pathは1.4.3.2であった.

    UITableViewDataSource

    protocol UITableViewDataSourceTableビューのデータを処理し、ユニットを提供するためのプロトコル.
    次の場合に使用

  • テーブルにセクション数とロー数を指定します.

  • 提供ユニット.

  • ヘッダーとツイッターの肩書きを提供するために

  • テーブルのインデックスを設定するには、次の手順に従います.

  • ユーザー-テーブル-の変更により、ベースデータが変更されます.

  • 実施しなければならない方法
  • // Return the number of rows for the table.     
    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
       return 0
    }
    
    // Provide a cell object for each row.
    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
       // Fetch a cell of the appropriate type.
       let cell = tableView.dequeueReusableCell(withIdentifier: "cellTypeIdentifier", for: indexPath)
       
       // Configure the cell’s contents.
       cell.textLabel!.text = "Cell text"
       cell.imageView!.image = UIImage(named: "bunny")
    
       return cell
    }
  • テーブルのデータの入力方法
    https://developer.apple.com/documentation/uikit/views_and_controls/table_views/filling_a_table_with_data
  • 詳細設定
  • コア
    https://developer.apple.com/documentation/uikit/views_and_controls/table_views/configuring_the_cells_for_your_table
  • エラー:
    The countryLabel outlet from the ViewController to the UILabel is invalid. Outlets cannot be connected to repeating content.
    @IBOutlet weak var countryLabel: UILabel! ビューコントローラに声明を使おうと思っていたのですが、だめですね.
    どのユニットなのか分からないので、ユニットが繰り返されます.

    画面間の移動


    Accessory action vs selection segue


    まずNavigationControllerを使用した場合…
    cellを押すと、cellに添付ファイルが追加され、アクセサリー反応が追加されます.悪.😱
    結論としてSelectionSegue>Showを用いた.

    何を書きますか.考えて、添付ファイルを先に見ることにしました.

    accessory


    UItableViewCellのインスタンスプログラム.
    アクセサリーの動きを支援するには、触っていることを認識しなければなりません.
    detailDisclosureButtonとdetailButton(i모양 아이콘)は動作が使いやすい.

    segueの使用


    誤り
    Optional(>)
    送信者ㅠㅠ
        func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
            performSegue(withIdentifier: "countryToCity", sender: indexPath.row)
        }
        
            override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
            if segue.identifier == "countryToCity" {
                print(sender)
            }
        }

    セルの高さの指定


    もうすぐ终わるみたい...
    行の高さが薄すぎる
    そのラベルも割れるからかな...