【Realm】

'add(_:update:)' is unavailable: Pass .error, .modified or .all rather than a boolean. .error is equivalent to false and .all is equivalent to true.

addメソッド使用時のエラーの対応方法

投稿日 2021/04/29 更新日 2021/04/29


こんにちは。当サイトの管理者「元木皇天」です。

今回はRealmのInsert処理であるadd()を使用した際に、「'add(_:update:)' is unavailable: Pass .error, .modified or .all rather than a boolean. .error is equivalent to false and .all is equivalent to true.」 エラーが表示されてしまった時の対応方法について解説します。

環境
OS:MacOS Big Sur
Xcode:バージョン12.3
Swift:バージョン5.3
Realm:バージョン10.5.1

参考文献:軽量・高速モバイルデータベース Realm入門

やりたいこと

'add(_:update:)' is unavailable: Pass .error, .modified or .all rather than a boolean. .error is equivalent to false and .all is equivalent to true.エラーを解消する

目次

エラー内容

Xcodeにて以下のようなコードを記載すると当エラーが表示されます。

エラーが表示されるコード

エラーの内容を和訳すると以下のような感じです。(Google訳です)

'add(_:update:)' is unavailable: Pass .error, .modified or .all rather than a boolean. .error is equivalent to false and .all is equivalent to true.


'add(_:update :)'は使用できません:ブール値ではなく、.error、.modified、または.allを渡します。 .errorはfalseと同等であり、.allはtrueと同等です。

エラーが出る原因は、addメソッドの引数であるupdate:trueまたはfalse を指定するとこのエラーが表示されます。

エラーの解消方法

エラーの文章にも記載はありますが、「update:」に対してtrue・falseでは無い値を指定することでエラーを解消できます。

指定する値としては以下の3つが指定できます。

.error
.modified
.all

以下、実際に変更した結果です。エラーが消えることが確認できます。

エラーが表示されなくなったコード

--補足--

実はこのエラー、Realmのバージョンによっては表示されません。
というのも、Realm Swift バージョン3.15.0までは"update: true"のような書き方だったのです。
これがRealm Swift バージョン3.16.0からは"update: .modifired"のようなBool値では無いものを指定するように変わりました。
早い話が、昔の書式を使わないように気をつけましょうということですね。

バージョン3.15.0のリファレンス
3.15のリファレンス バージョン3.16.0のリファレンス
3.16のリファレンス

まとめ

'add(_:update:)' is unavailable: Pass .error, .modified or .all rather than a boolean. .error is equivalent to false and .all is equivalent to true.は古い書式で書いていたためにエラーになってしまっていたので、新しい書き方に直す。

参考文献・おすすめ文献