見出し画像

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

今回の概略

ファイルの書き出しは NSString とほぼほぼ同じだけど、書き出し関数の返値に期待する処理なら変更必須😑
OC の NSString ではエラー用変数を引数に参照渡ししてそれを調べてエラー処理だったけど Swift では try 書かないとだめ🙄

#学習記 #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] 個


前回の粗筋

全部の列挙値に同じ Associated Value が付いてたら纏める方法が有ったら良かったのになぁ…😑



Csv

enum Error

じゃ、新しくした例外の形に対応してこうかしらね🤤

まずこの message をリファクタリング参照先ごと改名かな🤔
OCObjective-C の作法に合わせたのなら名前も OC に合わせるべきって話で🤤

………
リファクタリング効かないんですけど🙄
まぁ普通の置換でいいや。まだ外部で参照されてないから🤤

以前、先に例外作ってから throw する方式をここでも採用すると、なんか凄いお手軽感🤤
原本では やってないけどカスタム例外で楽をする、というのは割りと普通の手段なのかな、これを見る限りでは🤔
エラー種とメッセージだけ受け取って中で色々処理して例外を投げるカスタム例外…良さそう🤪️

かなり使いやすい気がする🤤
修正前コメント家してある古いコードのごちゃごちゃしたやつ見てよ…😞


移植再開

あ…候補出てこないけどこれ OC だとファイル読み込みが原本と違うから Stdlib に足したやつだけど Swift の Stdlib は原本見ながら移したから抜けてるっぽ😞
とりあえず無視して進む🤪

それで、期待してた String のファイル書出しはどうなってるのかな🤤

【Swift】テキストファイルの読み込みと書き出し
https://dev.classmethod.jp/articles/swift-txt-read-and-write/

let path = NSHomeDirectory() + "/Documents/LoveLetterForReply.txt"
let text = "書き込みたい内容"

do {
    // テキストの書き込みを実行
    try text.write(toFile: path, atomically: true, encoding: .utf8)
    print("成功\nopen", path)

} catch {
    // テストの書き込みに失敗
    print("失敗:", error )
}

ほぼほぼ NSString の時と一緒かな🤤
なんか atomically一旦別ファイルに書き出し とかいうのが増えてるくらい?🤔

String は NSString ではないので返値が違うのは仕方ないんだけど返値が何になってるか確認する方法が無いの困る😞

【Swift/String】write(to:atomically:encoding:)メソッドでファイルに文字列を書き込む方法!
https://tech.amefure.com/swift-string-write

writeメソッドはStringProtocolが保持しているメソッドです。StringProtocolとはStringとSubstringのみが準拠しているプロトコルで文字列を表現するためのプロトコルとして定義されています。そのメソッドの1つにファイルに文字を書き込むためのwriteメソッドが用意されています。
公式リファレンス:StringProtocol.write(to:atomically:encoding:)

write(to:atomically:encoding:)
https://developer.apple.com/documentation/swift/stringprotocol/write(to:atomically:encoding:)

func write(
    to url: URL,
    atomically useAuxiliaryFile: Bool,
    encoding enc: String.Encoding
) throws

void っぽ🤤
そういや何だったかを調べる時に見たけど返値無しでも省略されてるだけで 所謂いわゆる C 言語的な返値 void でも何かしらの値を返していて Swift は空のタプルを返す仕様ってのを🤔

つまりこれは、空のタプルを真偽値に変換できないぞって言ってるのね?🤔
まぁどのみち throws 付いてるので try 書かないとならないけど OC ではエラー検知用変数渡すから try 書いてないっていうオチ😞


次回は

原本に無くて OC には有る Stdlib の機能を移植するぽ🤤
StrArray とかは [String] なので移植しなくて大丈夫だけど、そういうのが固まってて飛ばした中に、移植しないといけないのも入ってて今の事態に陥ってるっぽ😞

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