[TIL] 21.03.12.(Fri)
実行内容
学習内容
SWIFT基礎文法復習
真剣にプロジェクトを実行することも重要ですが、今後私を支える実力が基礎だと思います.だから今日も文法を復習しました.
今日勉強した内容の大部分は悩み/問題と解決方法の部分で説明します。
厄介な問題
構造体、クラス、何を書くべきですか?
構造体とクラスで同じ機能を実現できることを知った瞬間から、どんな場合に何を使うべきか悩み始めた.構造体は拡張と初期実装のプロトコルであり,クラスは継承によって垂直機能を拡張し,既存の機能を上書きすることができ,機能拡張の観点から両選択に欠点はない.構造体は値タイプであり、内部プログラムを変更できないわけではありません.mutating
キーワードをメソッドに追加すると、ストレージ・プロシージャを変更できます.いくつかの違いがあるとすれば、構造体は値タイプであり、クラスは参照タイプの点であり、継承と上書きによって再定義できるかどうか.果たして状況に応じてどのようなものを採用すればよいのでしょうか.今日は価値のある参考資料をいただきました.
[リンク:構造とクラスから-APple Developerを選択]
Source - Apple Developer
以上はリンクの一部です.アップル社は、構造体とクラスを選択する際に以下の4点を考慮することを要求している.
現在のレベルでは、内部プロセスの変更などのタスクを実行する場合は、クラスとして設計する必要があります.構造体でproperty変更をサポートするために,毎日
mutating
キーワードを採用する方法を作成し,キーワードによって許されない強制解除の感覚を持つ.これからは変更の余地のあるタイプをレベルにします.また、
mutating
キーワードでpropertyを変更すると、何が起こるか知りたいです.これはクラスで値を変更するだけと何が違いますか?今日はしばらく勉強しましたが、構造体でmutating
キーワードを用いてpropertyを変更することで、property変更に全く異なるインスタンスが生成されるようですので、さらに理解する必要があります.値タイプと参照タイプなので、メモリ使用率の観点から、他の面もあるかもしれません.ARCのように単語しか聞いたことのない雑誌的なものが入っているので初心者ですが、志はいつも左右に揺れます.良い資料はありませんか...解決策
カスタムタイプにデコード(feat.JSON)
ジュースメーカープロジェクトでJSONを復号する過程で,Propertyを格納するタイプをカスタムタイプとし,戻ることなくコードストリーム(3.11 TIL)を論理的に組織することが考えられる.しかし、Decodable
プロトコルをタイプに適用しても、配分が不十分な問題があり、評論家のLinはinit(from decoder: Decoder)
のヒントを与え、長い奮闘を経て、最終的には小さな結果を得た.復号化の過程でJSON内で定義された名称と受信したい名称が異なる場合に使用できるCodingKey
プロトコルとinit(from decoder: Decoder)
頭文字登録器で受信するプロトコルタイプを定義して解決できる.struct Ingredient: Decodable {
var fruitName: Fruit?
var quantity: Int?
private enum CodingKeys: String, CodingKey {
case fruitName
case quantity
}
init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
self.fruitName = try? container.decode(Fruit.self, forKey: .fruitName)
self.quantity = try? container.decode(Int.self, forKey: .quantity)
}
}
try
ゲートが失敗する可能性があるため、復号コンテンツを受信するプロフェッショナルを傍観者タイプとして指定した.復号化の問題は解決したものの、別の問題が発生…!
すなわち,上記の出力では,文に異常出力の欠点があるが,intValue: nil
文はいったい何を意味するのだろうか.明らかにfoultName propertyはInt値を持たない単純な名前であり、出力結果はFruit(stringValue: "Pineapple", intValue: nil)
と同じである.CustomStringConvertible
プロトコルで出力された文をきれいにしました.この部分はさらに考慮する必要があります.
Reference
この問題について([TIL] 21.03.12.(Fri)), 我々は、より多くの情報をここで見つけました
https://velog.io/@ryan-son/TIL-21.03.12.Fri
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
struct Ingredient: Decodable {
var fruitName: Fruit?
var quantity: Int?
private enum CodingKeys: String, CodingKey {
case fruitName
case quantity
}
init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
self.fruitName = try? container.decode(Fruit.self, forKey: .fruitName)
self.quantity = try? container.decode(Int.self, forKey: .quantity)
}
}
Reference
この問題について([TIL] 21.03.12.(Fri)), 我々は、より多くの情報をここで見つけました https://velog.io/@ryan-son/TIL-21.03.12.Friテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol