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 }