2017-09-04 11 views
0

Swiftアプリケーションのレルムデータベースでモデルデータを修正したいとします。ここに私のコードです:マップを使用してレルム値swiftを変更する

try! realm.write { 


     realm.objects(CompanyModel.self).map({ (model) in 
      model.isSelected = true 
     }) 
    } 

アイデアは単純で、モデルを反復処理してtrueにisSelectedブール値プロパティを変更します。しかし、それは動作しないように見えます。どうして?

+1

「動作しないように見える」のはなぜですか?何かエラーが出ますか? – Scriptable

+0

@Scriptable私はデータベースを調べました。 –

答えて

1

元のResultsインスタンス、したがってレルムに保存されているモデルオブジェクトを変更する場合は、mapを使用しないでください。 'map'は変更関数ではなく、配列(この場合はResults)を反復し、シーケンスの各要素に変換を適用し、変換の結果を含む新しいシーケンスを返します。

実際に必要となるのは、の要素を反復処理し、各要素のクロージャを実行しますが、ネットArrayを返さないforEach関数です。私は現在それをテストすることはできませんが、forEachはのメンバー関数であり、Resultsが継承しているので、ResultsインスタンスでforEachを使用することはできないと思いますので、通常のforループを使用する必要がありますこれを行う。

try! realm.write { 
    for model in realm.objects(CompanyModel.self) { 
     model.isSelected = true 
    } 
} 
+0

Pasztorありがとう、私は.map .filterとsimiliar関数を使って既存のオブジェクトを変更できるかどうか疑問に思った。 –

+0

私は助けてくれると嬉しいです。 'map'と' filter'のどちらも関数を変更するものではないので、あなたはできません。彼らは両方とも結果とともに新しいコレクションを返します。 –

+0

Pazstor私は、myArr = myArr.map {..}。filter {..}のようになりました。 –

関連する問題