RealmSwift で配列を扱う手順をまとめます。
少しだけ作業が必要です。
前提条件
例として、以下のようなメモデータのモデルを RealmDB で保存できるよう作りますー。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
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 を定義します。
1 2 3 |
class ImageFile: Object { @objc dynamic var path = "" } |
ここでは ImageFile というクラスを作成して、そのプロパティに path(String型)を定義しました。
これを使って RealmSwift で定義すると、以下のようになります。
1 2 3 4 5 6 7 8 9 10 |
class Memo: Object { @objc dynamic var uniqueId = "" @objc dynamic var text = "" @objc dynamic var date = Date() let imageFilePaths = List<ImageFile>() override static func primaryKey() -> String { return "uniqueId" } } |
Objective-Cランタイムではジェネリクスが使えないため、let で宣言、dynamic は不要です。
ちなみに RealmDB に画像(Data型)を保存することは可能ですが、16MB以上のデータを保存しようとすると、例外が投げられます/(^o^)\
String型も同様で、16MB以上のデータを保存することはできません。
さいごに
画像(Data型)に関しては検索もかけられないので、
データベースに保存するのは良くないかなって認識。
とりあえず配列が扱えるようになったと思うので、このへんで!
br>
違うよ!とかこういう方法あるよ!ってのがあれば教えてください。
では( ¯·ω·¯ )
コメント