プロジェクトC.Weatherを直接作成します.
14545 ワード
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なので、これを使います.
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
}
}
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"
表ビュー
table viewを描くには
UITableViewDataSourceとUITableViewDelegateの違いがわかりません!
なんだっけ!
もちろん知りません!私は今探しに行きます!🤣
UITableViewDelegate
protocol UITableViewDelegate
次の問題を処理したい場合は、このプロトコルの方法を使用します.
table view全体の構造を作成時に使用する依頼として表示します.
実現しなければならない方法はありません!
NSIndexPath
class NSIndexPath : NSObject
IndexPathというものもあり、特にFoundationフレームワーク(Table ViewまたはCollection View)でNSIndexPathを使用する.tableviewに表示される数行目に使用します.
セクションヘッダ部のROW値はN/A、0からカウント
IndexPathは、ツリー構造で目的地に到達する経路を表す.
上図ではindex pathは1.4.3.2であった.
UITableViewDataSource
protocol UITableViewDataSource
Tableビューのデータを処理し、ユニットを提供するためのプロトコル.次の場合に使用
テーブルにセクション数とロー数を指定します.
提供ユニット.
ヘッダーとツイッターの肩書きを提供するために
テーブルのインデックスを設定するには、次の手順に従います.
ユーザー-テーブル-の変更により、ベースデータが変更されます.
実施しなければならない方法
// 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)
}
}
セルの高さの指定
もうすぐ终わるみたい...
行の高さが薄すぎる
そのラベルも割れるからかな...
Reference
この問題について(プロジェクトC.Weatherを直接作成します.), 我々は、より多くの情報をここで見つけました
https://velog.io/@msi753/프로젝트C-Weather-직접-만들기
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
送信者ㅠㅠ
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)
}
}
セルの高さの指定
もうすぐ终わるみたい...
行の高さが薄すぎる
そのラベルも割れるからかな...
Reference
この問題について(プロジェクトC.Weatherを直接作成します.), 我々は、より多くの情報をここで見つけました https://velog.io/@msi753/프로젝트C-Weather-직접-만들기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol