【Console Application】ファイルとデータベース 316【学習記】
今回の概略
Swift では何も記述せずに子関数の throw を呼び出し元に押し付ける事はできず、 catch を書かないとならない😞
rethrow という語も有るけど引数に関数を取る様な高次関数の場合に使う物で手抜き再 throw を可能にする物ではないっぽい🤔
列挙をエラーとして定義できるらしく態々 NSError で列挙の文字列を入れる必要は無かったっぽい
前回の粗筋
saveCsv を組んでてオーバーロード側の throw が怒られてて中断される😞
throw
例外は Java だと書かなければ上に伝播、 Kotlin や OC だと書かなくてもエラーにはならない(止まる)…😑
Swift はその場で責任取らないといけないかすぐ上で捕まえないといけない…?🤔
これ上に流したくて do 書かないといけなかったら Swift の評価がまた下がるんだけど🙄
open func removeItem(atPath path: String) throws
……… open ????🙄
………😞
細かくなったのは良いけど挙動が変わるのヤメテ🤬
Swift こんなのばっか😞
こんなの全要修正じゃん🙄
プロトコル…そういや OC にもそういう概念有ったっけ…🤤
OC の時は for in に対応するためのプロトコルだったけど、エラーハンドリングにもプロトコルみたいのがあって特に書かなくても投げられる仕掛けが有ったりするのかな…?🤔
というか無いと「 do を全階層に書くバカみたいなコーディングが必要になる」わけなんだけど…🤬
………🤔
エラーを定義できるならこっちのが楽じゃない?🤤
Java 系は種類と説明を引数に用意された例外を new して throw してたけどエラーオブジェクトに関してだけは Swift の方が使い勝手良さそう🤔
でも今求めてる情報はそれじゃない😞
とりあえずこの記事には「更に外に投げるには?」というのは書かれてないぽ🙄
発見😑
"再throw" という語で検索したら出た🤤
未知の技術はこれみたいに検索するのに適切な語に行き着くのに凄い時間がかかる…😞
😭😭😭
余計怒られてるんだけどー!😭
記事を読み進めても良くわからないお😞
//親関数
func myFunc(arg: () throws -> String) rethrows -> String {
// ^^^^^^^^ throws を書くのと同じ場所に書く。
try arg()
}
//子関数
func myFunc(arg: () throws -> Void) rethrows {
// ^^^^^^ throws を指定する。
try arg()
}
………引数に throws 指定…?🤔
そういや1つ前の記事もこんな感じの書式になってたお🙄
でもこの記事も前の記事も arg に関数を渡しててそんな特殊な使用方法の関数じゃないんだけどってなってる😞
ひとまず rethrows と書くのは間違いないっぽい🤔
あ、そもそも rethrow 自体が関数を引数にしてる場合の話で、そこからして話が違ってたわ🤪
つまり、資料の探し直し…😞
catch 強制…?🙄
握りつぶすなら `try!` って書かれてる😑
………どうやら今回の場合、オーバーロードだし上に責任を取らせたいから諦めて catch するしかないっぽい🤔
やれやれ…やっと元の移植作業へ戻れる…🙄
次回は
もっとサクサク進めたいけどファイル関係なのでどうしても時間がかかる😑
救いは String は NSString みたいな機能を持ってるっぽいってところ?🤔🚩
この記事が気に入ったらサポートをしてみませんか?