지속형
@propertyWrapper
public struct Persisted<Value> where Value : _Persistable
extension Persisted: Decodable where Value: Decodable
extension Persisted: Encodable where Value: Encodable
extension Persisted: OptionalCodingWrapper where Value: ExpressibleByNilLiteral
@Persisted는 Realm에서 managed해야 하는 객체 하위 클래스의 속성을 선언하는 데 사용됩니다.
사용 예시:
class MyModel: Object {
// A basic property declaration. A property with no
// default value supplied will default to `nil` for
// Optional types, zero for numeric types, false for Bool,
// an empty string/data, and a new random value for UUID
// and ObjectID.
@Persisted var basicIntProperty: Int
// Custom default values can be specified with the
// standard Swift syntax
@Persisted var intWithCustomDefault: Int = 5
// Properties can be indexed by passing `indexed: true`
// to the initializer.
@Persisted(indexed: true) var indexedString: String
// Properties can set as the class's primary key by
// passing `primaryKey: true` to the initializer
@Persisted(primaryKey: true) var _id: ObjectId
// List and set properties should always be declared
// with `: List` rather than `= List()`
@Persisted var listProperty: List<Int>
@Persisted var setProperty: MutableSet<MyObject>
// LinkingObjects properties require setting the source
// object link property name in the initializer
@Persisted(originProperty: "outgoingLink")
var incomingLinks: LinkingObjects<OtherModel>
// Properties which are not marked with @Persisted will
// be ignored entirely by Realm.
var ignoredProperty = true
}
indexed: true
을 이니셜라이저에 전달하여 Int, Bool, String, ObjectId 및 Date 속성을 인덱싱할 수 있습니다. 속성을 인덱싱하면 해당 속성에 대한 동일성 쿼리의 성능이 향상되지만, 쓰기 성능은 약간 저하됩니다. 현재 이 인덱스를 사용하는 다른 작업은 없습니다.
primaryKey: true
을 이니셜라이저에 전달하여 속성을 클래스의 기본 키로 설정할 수 있습니다. 복합 기본 키는 지원되지 않으며, 둘 이상의 속성을 기본 키로 설정하면 런타임에 예외가 발생합니다. Int, String, UUID 및 ObjectId 속성만 기본 키로 만들 수 있으며, Atlas App Services를 사용할 때는 기본 키의 이름을 _id
로 지정해야 합니다. 프라이머리 키 속성은 관리되지 않는 객체에서만 변경할 수 있으며 Realm에 추가된 객체에서 변경하면 예외가 발생합니다.
속성은 표준 Swift 구문을 사용하여 선택적으로 기본값을 지정할 수 있습니다. 기본값을 지정하지 않으면 처음 액세스할 때 값이 생성됩니다(모든 Optional 유형의 경우 nil
, 숫자 유형의 경우 0, Bool의 경우 false, 빈 문자열/데이터의 경우, UUID 및 ObjectID에 대한 새로운 임의의 값). 목록 및 MutableSet 속성은 빈 List/MutableSet의 기본값으로 설정하여 정의 해서는 안 됩니다. 이렇게 하면 작동하지만 Realm에서 managed하는 객체에 액세스할 때 성능이 저하됩니다. 마찬가지로 ObjectID 속성을 ObjectID.generate()
로 초기화 해서는 안 되며, 이렇게 하면 추가 ObjectID가 생성된 후 Realm에서 읽을 때 삭제될 수 있습니다.
클래스에 @Persisted 속성이 하나 이상 있으면 다른 모든 속성은 Realm에서 무시됩니다. 즉, managed 속성이 유지되지 않으며 쿼리 및 managed 속성이 필요한 정렬 및 집계와 같은 기타 작업에 사용할 수 없습니다.
@Persisted는 객체 또는 EmbeddedObject 하위 클래스의 속성 이외의 다른 곳에서는 사용할 수 없으며 다른 위치에서 사용하려고 하면 런타임 오류가 발생합니다.
-
유형의 기본값으로 느리게 초기화되는 속성을 선언합니다.
선언
Swift
public init()
-
지정된 값을 기본값으로 사용하는 속성을 선언합니다.
선언
Swift
public init(wrappedValue value: Value)
-
선언
Swift
public init(from decoder: Decoder) throws
-
선언
Swift
public func encode(to encoder: Encoder) throws
-
유형의 기본값으로 느리게 초기화되는 인덱싱된 속성을 선언합니다.
선언
Swift
public init(indexed: Bool)
-
기본값으로 지정된 값을 사용하는 인덱싱된 속성을 선언합니다.
선언
Swift
public init(wrappedValue value: Value, indexed: Bool)
-
유형의 기본값으로 느리게 초기화되는 기본 키 속성을 선언합니다.
선언
Swift
public init(primaryKey: Bool)
-
기본값이 지정된 값인 프라이머리 키 속성을 선언합니다.
선언
Swift
public init(wrappedValue value: Value, primaryKey: Bool)
-
지정된 원본 속성 이름을 사용하여 LinkingObjects 속성을 선언합니다.
- param originProperty: 이 객체에 연결되는 Realm 객체 유형의 속성의 이름입니다.
선언
Swift
public init(originProperty: String)