CustomPersistable
public protocol CustomPersistable : _CustomPersistable
Realm がサポートするタイプにマッピングしたり、タイプからマップしたりできるタイプ。
Realm がネイティブにサポートしていない Realm に型を保存するには、型を CustomPersistable または FailablecustomPersistable のいずれかに準拠しているものとして宣言します。これには、このタイプがマッピングされる Realm タイプ、 PersistedType
を取得する初期化子、適切なPersistedType
を返すプロパティを示すPersistedType
という名前の関連タイプを定義する必要があります。 たとえば、 URL
を永続的にするには、次の操作を実行します。
// Not all strings are valid URLs, so this uses
// FailableCustomPersistable to handle the case when the data
// in the Realm isn't a valid URL.
extension URL: FailableCustomPersistable {
typealias PersistedType = String
init?(persistedValue: String) {
self.init(string: persistedValue)
}
var persistableValue: PersistedType {
self.absoluteString
}
}
これを行うと、URL を使用してプロパティを定義できます。
class MyModel: Object {
@Persisted var url: URL
@Persisted var mapOfUrls: Map<String, URL>
}
PersistedType
は、Realm でサポートされているプリミティブ タイプまたはEmbeddedObject
サブクラスのいずれかになります。 マップされた型のデータを複数保存する必要がある場合は、 EmbeddedObject
サブクラスを使用できます。 たとえば、 CGPoint
を保存するには次のようにします。
// Define the storage object. A type used for custom mappings
// does not have to be used exclusively for custom mappings,
// and more than one type can map to a single embedded object
// type.
class CGPointObject: EmbeddedObject {
@Persisted var double: x
@Persisted var double: y
}
// Define the mapping. This mapping isn't failable, as the
// data stored in the Realm can always be interpreted as a
// CGPoint.
extension CGPoint: CustomPersistable {
typealias PersistedType = CGPointObject
init(persistedValue: CGPointObject) {
self.init(x: persistedValue.x, y: persistedValue.y)
}
var persistableValue: PersistedType {
CGPointObject(value: [x, y])
}
}
class PointModel: Object {
// Note that types which are mapped to embedded objects do
// not have to be optional (but can be).
@Persisted var point: CGPoint
@Persisted var line: List<CGPoint>
}
クエリは、カスタム永続可能なタイプではなく、永続的なタイプで実行されます。 クエリに渡される値は、永続化型またはカスタム永続可能型のいずれかになります。 埋め込みオブジェクトにマップされるカスタム永続可能なタイプの場合、 ノードごとの等価性が使用されます。 たとえば、 realm.objects(PointModel.self).where { $0.point == CGPoint(x: 1, y: 2) }
は"point.x == 1 AND point.y == 2"
と同等です。
-
永続化された型からこの型のインスタンスを構築します。
宣言
Swift
init(persistedValue: PersistedType)
-
このタイプから永続化されたタイプのインスタンスを構築します。
宣言
Swift
var persistableValue: PersistedType { get }