見出し画像

【Console Application】ファイルとデータベース 370【学習記】


今回の概略

内部クラスから外側クラスへのアクセスは parent を持たせれば可能だが外側クラスがプロパティとして内部クラスを保持する場合初期化initで積む😭
遅延初期化や nil 許容にすれば init を抜けられるけど別途設定関数を呼ぶ必要が有って設計として不親切なので却下😑initで全て初期化できるべき
そのプロパティになった内部クラスにプロパティとして外側クラスを保持させると循環参照が明示的に作られるから良く考えると結局 (Swift 的に) 不適切な設計になるっぽい😞

#学習記 #Swift

【Console Application】ファイルとデータベース【学習記】
仕様
https://note.com/sayka/n/nb8a67fa90a64?magazine_key=m7bb64c6a359f#br1mB

仕様
レコード
・レベル
 1-12
・難易度
 b,n,h,a,l
・曲名
・ランプ
 -,x,a,e,c,h,e,f

オプションスイッチ
-u file.csv # 更新(略値)
 ファイル名だけ指定した場合更新処理と見做す
-d file.csv # 削除
-p # csv 出力(略値)
 何も指定せずに起動した場合出力処理と見做す
-v # バージョン
-h # ヘルプ

----備忘録
public 装飾子 → open
列挙をカスタムエラーへ
parseCsv の空行問題
Swift の args は OC 同様 [引数+1] 個


前回の粗筋

内部クラスは外側クラスを見る方法がわからない😞
内部クラスに外側クラスをプロパティで持たせようとしても外側クラスの init が終わらないと渡せない…😑



DBAccessor

うーん…どうしたものか…😞
前回終わってから作戦を練ってたんだけど

・内部クラスが外側内部クラスを内包してる方のクラスをプロパティ埋め込み無しに実現する方法
初期化init中に self を渡す方法
・内部クラスが呼んでいる外側クラスの関数を共通関数群common libとして分離する

のどれかかな、と思う😑
一番良いのが勿論一番上の内部から外側関数を呼べるようにする事なんだけど…これは一度調べたけど出てこなかったのよね…🙄


内部クラスから外側クラス

逆の記事内部クラスへアクセスの記事は凄い一杯有る😑
他の3言語でも内部クラスを扱える物は例外なく外側を見る方法が有ったけど Swift だと突然資料が出てこなくなるのでできないのかな、という結論をしたのが以前の調査の結論だったワケだけど…😞

前回から少し時間が経ってて、その間に移植とかで得られた知見も有るからまた少し検索の仕方に違いが出るかも、を期待して再調査開始するぽ🙄出てこないと思うけど
でもなんか、 Mac のプログラミングが Xcode じゃなかった時代は、こんな感じで、有るかどうかもわからない資料を探して延々と調べる感じだったから「最先端」っていつもこうなのかなって思わなくもない😑

【Swift】型の種類について(構造体、クラス、列挙型)
https://zenn.dev/kaitombow/scraps/ea98cb78117685

型の内部での型自身へのアクセス
型の内部のプロパティやメソッドなどの中では、大文字のSelfキーワードを通じて型自身にアクセスできる。

これは今回の探している情報ではないけれど、他の所で自クラス静的プロパティの参照をしているのがあるからもしかしたらこれで置換できるかも…?🤔
そうすれば自クラス名を書かなくて良くなるので後で(忘れてなければ)試してみようかしら🤤

………

………

………

出てこないけれど ちょいちょい「クロージャ」「プロトコル」という語が出てくるお😑
クロージャは見たらいわゆるラムダ構文みたいだからプロトコルでちょっと調べるぽ🤔(逸脱

【Swift】プロトコル(protocol)の使い方
https://techblog.recochoku.jp/8051

Swiftのプロトコルとは、クラスや構造体が保持するプロパティやメソッドなどの決まり事を定めるものです。
プロトコルを定義することによって、複数の型で共通の機能を実装することができます。
型宣言の時にプロトコルに従い、定められた機能を実装することをプロトコルに「準拠する」と言います。

_人人人人人人_
> interface <
 ̄Y^Y^Y^Y^Y^ ̄

はい…解散…と思ったけど delegate というのが気になるのでもうちょっと調べるお😑
OCObjective-C と同じシロモノかな…?🤔

SwiftにおけるDelegateとは何か、なぜ使うのか
https://qiita.com/st43/items/9f9990d76cefa1909ef4

プロトコルとデリゲートのとても簡単なサンプルについて
https://qiita.com/mochizukikotaro/items/a5bc60d92aa2d6fe52ca

どうやら OC の概念のままで間違いなさそう😑(うろおぼえ)
イベント処理基準になっているならアリかもしれないけど今の学習用題材はそうじゃないんだよねぇ😞


init 中に self を渡す

………

………

………

全く出て来ず😞そりゃそうか


次回は

内部クラスDBKeyが呼んでいる parent の関数を分離するお😑
分離は要らない可能性はゼロじゃないけど少なくとも DBKey 内から呼ばない形へ変更する、のは間違いない🤔

この記事が気に入ったらサポートをしてみませんか?