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

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

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

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

Swift

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

Q&A

解決済

1回答

1490閲覧

Realmオブジェクトの特定の列を一括で更新したい

退会済みユーザー

退会済みユーザー

総合スコア0

Realm

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

Swift

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

0グッド

0クリップ

投稿2020/09/02 09:32

編集2020/09/03 08:19

前提・実現したいこと

Realmを使って値をやり取りするアプリを作成しており、
Realmオブジェクトの特定の列の各値を一括で引き算したいと考えています。

for文を使って繰り返し処理する方法はイメージできるのですが、
よりシンプルに?記述する方法を探しており、mapメソッドが使えるのではないかと考えているのですが、
記述方法がわからず困っております。

記述方法をご教示いただけないでしょうか。
(そもそもmapメソッド使えないよ、ということでしたら、その旨ご指摘いただけると幸いです)

該当のソースコード

Swift

1//例えば以下の処理で、 2 let realm = try! Realm() 3 let n = 7 4 let results = realm.objects(Model.self).filter("number > %@" , n) 5 6//以下のResultsが得られるとします。 7/* 8 Results<Model> <> ( 9 [0] Model { 10 id = 1234; 11 number = 8; 12 }, 13 [1] Model { 14 id = 5678; 15 number = 9; 16 } 17) 18*/ 19 20//上記Resultsのnumber(Int)を一括で-1するために、以下をどのように記述すればよいかがわからずにおります 21let Test = results.map { (<#Model#>) -> U in 22 <#code#> 23 } 24 25//追記:試したこと 以下の記述では狙いの結果は得られませんでした  26let Test = results.map { $0.listNumber - 1 } 27

補足情報(FW/ツールのバージョンなど)

Swift5
Xcode11.6
Realm5.0.2

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

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

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

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

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

guest

回答1

0

ベストアンサー

※スタックオーバーフローに投稿した同様の質問に回答いただいたため、Close致します。
https://ja.stackoverflow.com/questions/70089/
※以下、いただいた回答です。

forを使って普通に書くのが一番わかりやすいです。

try! realm.write { for result in results { result.number = result.number - 1 } }

あえてmapのスタイルで書きたいのであれば、次のように書けます。

try! realm.write { results.map { $0.number = $0.number - 1 } }

ちなみに下記のコードが期待通りに動かないのは値を代入していないからです。
(プロパティを参照してその値から1を引き算した値をそのまま返しているだけ)

results.map { $0.listNumber - 1 }

ただ、戻り値が必要ならmapでいいですが、値を更新したいだけならmapよりforEachで書く方が意図がわかりやすいです。

try! realm.write { results.forEach { $0.number = $0.number - 1 } }

投稿2020/09/03 08:22

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問