24721


RealmSwiftをつかってToDoアプリを作ろうと思っています

その際、並べ替えもできるようにしたいのですが、その際に配列を使ったほうが楽だろうという考えに達しました。  
というわけで以下のような構造を考えてみました

[code]

    //上のリストではTableに配置する際の順番を、下のObjectではそのタスクの詳細情報を管理する
    
    //タスク名を格納する配列
    var list = ["hoge","fuga","miso"]
    
    //realmに格納するObject
    class Task: Object{
        dynamic var name: String!
    
        //タスクの詳細
    }
    
[/code]

しかし、確か（なのですが）RealmSwiftではObject型を継承していない普通の配列を保存することができなかったはずで........

ここだけUserDefaultsを使うべきかと迷っています。  
RealmSwiftで配列を保存できる簡単な方法というのはあるのでしょうか？  
よろしくお願いいたします


CC BY-SA 3.0
2016-05-10T01:55:10.867
24689
2016-05-10T13:50:41.767
2016-05-10T13:50:41.767
5519
15418
question
swift2 realm xcode7
RealmSwiftで配列を保存する方法


いろいろやり方はありますが、おっしゃられていることはTaskの順番を記憶したいということですので、大きく２つの方法があります。

まずはオーソドックスに順番を表すプロパティをTaskに持つことです。  
この方法はRealmに限らず他のデータベースでもよく使われる基本的なモデリングの考え方になります。

もう一つは、Realmの場合は順番を保持する方法として`List`が使えるので、「タスク名」ではなくタスクそのものを`List`で管理してしまうという方法です。  
この方法のメリットは扱いが簡単になることと、先の方法と違って、ソートしなくても良いという点です。

例えば次のような`TaskList`というクラスをもう一つ作ります。

[code]

    class TaskList: Object {
        let list = List<Task>()
    }
    
[/code]

そして、下記のようにして利用します。

[code]

    let task = Task()
    task.name = "..."
    
    let taskList = TaskList()
    taskList.list.append(task)
    
[/code]

`list`は順番が保持されていますので、これをそのまま利用すればいいです。

なお、順番を保存するためだけに`NSUserDefaults`を使う、という案は、ややこしくなるだけでメリットはほぼないと思います。


CC BY-SA 3.0
2016-05-10T13:49:29.137
24721
2016-05-10T13:49:29.137
5519
24689
answer