【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
やりたいこと
'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.16.0のリファレンス
まとめ
'add(_:update:)' is unavailable: Pass .error, .modified or .all rather than a boolean. .error is equivalent to false and .all is equivalent to true.は古い書式で書いていたためにエラーになってしまっていたので、新しい書き方に直す。