【RealmSwift】配列を扱う

RealmSwift で配列を扱う手順をまとめます。
少しだけ作業が必要です。

前提条件

例として、以下のようなメモデータのモデルを RealmDB で保存できるよう作りますー。

struct Memo {
    let uniqueId: String
    let text: String
    let date: Date
    let imageFilePaths: [String]

    init(uniqueId: String, text: String, date: Date, imageFilePaths: [String]) {
        self.uniqueId = uniqueId
        self.text = text
        self.date = date
        self.imageFilePaths = imageFilePaths
    }
}

imageFilePaths という画像の保存パスを配列で管理することを想定しています。
例が分かりにくいというクレームは受け付けません ( ˘ω˘ )

方法

Arrayクラスは Realm では扱えないので、RealmSwift のListクラスを使用します。
Listクラスは Object(そのサブクラスも可)のみ格納できるので、まずは Object を定義します。

class ImageFile: Object {
    @objc dynamic var path = ""
}

ここでは ImageFile というクラスを作成して、そのプロパティに path(String型)を定義しました。
これを使って RealmSwift で定義すると、以下のようになります。

class Memo: Object {
    @objc dynamic var uniqueId = ""
    @objc dynamic var text = ""
    @objc dynamic var date = Date()
    let imageFilePaths = List()

    override static func primaryKey() -> String {
        return "uniqueId"
    }
}

Objective-Cランタイムではジェネリクスが使えないため、let で宣言、dynamic は不要です。

ちなみに RealmDB に画像(Data型)を保存することは可能ですが、16MB以上のデータを保存しようとすると、例外が投げられます/(^o^)\
String型も同様で、16MB以上のデータを保存することはできません。

さいごに

画像(Data型)に関しては検索もかけられないので、
データベースに保存するのは良くないかなって認識。

とりあえず配列が扱えるようになったと思うので、このへんで!

違うよ!とかこういう方法あるよ!ってのがあれば教えてください。
では( ¯·ω·¯ )

Realm
スポンサーリンク

コメント