質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Realm

RealmとはSQLiteやCore Dataに代わるモバイルデータベースです。iOSとAndroidの両方でサポートされています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

2回答

1747閲覧

realm使用時にreturnが必要なメソッドのdo{}catch{}について

Ka_ya_

総合スコア31

Realm

RealmとはSQLiteやCore Dataに代わるモバイルデータベースです。iOSとAndroidの両方でサポートされています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2020/04/20 06:49

質問失礼します。

realmでの検索結果を配列として返すメソッドを作成したいのですが、
catchの際に返したい配列がなく、
かといってdoの外に出そうとするとrealmのエラーになってしまいます。
catchの場合のreturnにはどう記載すれば良いのでしょうか。

初歩的な事とは思いますが、どなたかご教授いただけますと嬉しいです。
よろしくお願い致します。

Swift

1 func selectAllO() -> Array<Records>{ 2 3 do { 4 //インスタンスの取得 5 let realm = try Realm() 6 7 //オブジェクトの取得 8 let results = realm.objects(Records.self) 9 print(results) 10 11 let array = Array(results) 12 13 return array 14 } 15 catch { 16 print(error) 17 } 18 }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

やはり、質問者さんがどのようにしたいか次第ですが、takabosoftさんがご提案された方法のほかは、

1) Optional型を返すメソッドとして定義し、catch内部でnilを戻す
呼び出し側でnilを判別して処理を変える

2) do-catchを使わずに呼び出し元に投げる
呼び出し元でエラーを捕捉して処理を変える

3) fatalError()でその場で落ちる
落ちたらそれでおしまい

があると思います。
エラーが起きた後の処理をどのようにするのかによって選択肢は決まるかと思います。

swift

1// エラーを投げるダミーの関数(Realm()の代わり) 2struct myError: Error { 3} 4 5func myErrFunc() throws -> Int { 6 throw myError() 7 // 以下の行には到達しないので warning が出るが、ここでは無視 8 return 1 9} 10 11// Realm を呼び出す関数でも throw する 12func myFunc() throws -> Int { 13 // do-catch でエラーを捕捉せず呼び出し元に投げる 14 // この例だと myErrFunc() は必ずエラーを投げる関数なので、ここで例外が発生する 15 let a = try myErrFunc() 16 17 return a 18} 19 20// メイン 21do { 22 let a = try myFunc() 23 print("エラーなし: a = (a)") 24} catch { 25 print("エラー発生") 26}

投稿2020/04/20 09:33

TsukubaDepot

総合スコア5086

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Ka_ya_

2020/04/20 09:41

ご回答ありがとうございます。 nilで返せないのかなと一度考えたのですが、 オプショナル型にしてしまえば良かったんですね! エラーに関する詳しい記述もいただき、とても勉強になりました。 ありがとうございます!
guest

0

どうしたいかによりますが、「空の配列を返す」で良ければ

catch { return [] }

とかで行けないですかね?

投稿2020/04/20 08:48

takabosoft

総合スコア8356

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Ka_ya_

2020/04/20 09:40

ご回答ありがとうございます。 空の配列を返す場合はシンプルにそれで良かったんですね…!! resultsの型で混乱していたので助かりました。 ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問