web-dev-qa-db-ja.com

コアデータへの構造体を含む構造体であるSwiftモデルを保存するための適切なアプローチは何ですか?

Core Dataは初めてですが、NSManagedObjectから継承する必要性を、私のモデルがSwift構造体で構成される構造体であるという事実と調整する方法がわかりません。私はを押して元に戻すスタックに簡単にポップできるように、モデルの値の型を選択しました。ただし、値の型は継承できないため、モデルを保存するために次にどこに移動すればよいかわかりません。モデルをクラスにして、代わりにUndoManagerを使用する必要がありますか?他に可能なアプローチは何でしょうか?

1
Austin Conlon

いくつかのオプションがあります:

1-それらをクラスに変換します。したがって、NSManagedObjectから継承して、インターネットで通常見られるチュートリアルのように残りを行うことができます。

2-コアデータに格納する構造体の周りにラッパーを作成します。たとえば、次のような構造体があるとします。

struct Student {
    let name: String
}

次のようにラップされます。

class ManagedStudent: NSManagedObject {

    @NSManaged var name: String

    var student: Student {
       get {
            return Student(name: self.name)
       }
       set {
            self.name = newValue.name
       }
     }
}

ただし注意値の型参照の型ネストされた混合型の違いについて。一部の実装をさらにprivateにして、追加のコードをより透過的にすることもできます。

3-構造体をNSCodingに準拠させ、データベースに直接エンコードできます。しかし、残念なことに、それらに対して効率的なクエリを実行することはできません。

4-CoreDataの代わりに他のライブラリを使用します。すぐに使える構造体をサポートするライブラリがいくつかあり、それらのいくつかはCoreDataの上に書かれています。

5-データベースをまったく使用しないでください!あなたのユースケースはわかりませんが、オブジェクト間に関係がない場合、通常はデータベースはまったく必要ありません。単純なファイルシステムですべてのことができます。

ああ、もう1つ、CoreDataが初めてで、学ぶまでそれを試してみたい場合は、最初のオプションに固執してください。それに慣れたら、他のオプションも調べてください。

幸運を。

2