Realm

@frozen
public struct Realm
extension Realm: Equatable

Realm 인스턴스('Realm'이라고도 함)는 Realm 데이터베이스를 나타냅니다.

Realm은 디스크( init(path:) 참조) 또는 메모리( Configuration 참조)에 저장할 수 있습니다.

Realm 즉, 동일한 경로나 식별자를 사용하여 동등한 Realm 객체를 구성하면 오버헤드가 제한적으로 발생합니다.

특히 Realm 인스턴스가 제거되었는지 확인하려면(예를 들어, Realm을 열고 일부 속성을 확인한 다음 Realm 파일을 삭제했다가 다시 열려면 Realm을 사용하는 코드를 배치합니다. autoreleasepool {} 내에 넣고 이에 대한 다른 강력한 참조가 없는지 확인합니다.

경고

warning Non-frozen RLMRealm instances are thread-confined and cannot be shared across threads or dispatch queues. Trying to do so will cause an exception to be thrown. You must obtain an instance of RLMRealm on each thread or queue you want to interact with the Realm on. Realms can be confined to a dispatch queue rather than the thread they are opened on by explicitly passing in the queue when obtaining the RLMRealm instance. If this is not done, trying to use the same instance in multiple blocks dispatch to the same queue may fail as queues are not always run on the same thread.

속성

이니셜라이저

  • 기본 Realm의 인스턴스를 가져옵니다.

    기본 영역은 iOS에서는 애플리케이션의 문서 디렉토리, OS X에서는 애플리케이션의 Application Support 디렉토리 아래에 default.realm 으로 유지됩니다.

    기본 Realm은 기본 Configuration 을 사용하여 생성되며, 이 기본값은 Realm.Configuration.defaultConfiguration 속성을 새 값으로 설정하여 변경할 수 있습니다.

    스로우

    Realm을 초기화할 수 없는 경우 NSError 입니다.

    선언

    스위프트

    public init(queue: DispatchQueue? = nil) throws

    매개변수

    queue

    Realm을 제한할 선택적 디스패치 대기열입니다. 지정된 경우 이 Realm 인스턴스는 현재 스레드가 아닌 지정된 대기열로 디스패치된 블록 내에서 사용할 수 있습니다.

  • 지정된 구성으로 Realm 인스턴스를 가져옵니다.

    스로우

    Realm을 초기화할 수 없는 경우 NSError 입니다.

    선언

    스위프트

    public init(configuration: Configuration, queue: DispatchQueue? = nil) throws

    매개변수

    configuration

    Realm을 만들 때 사용할 구성 값입니다.

    queue

    Realm을 제한할 선택적 디스패치 대기열입니다. 지정된 경우 이 Realm 인스턴스는 현재 스레드가 아닌 지정된 대기열로 디스패치된 블록 내에서 사용할 수 있습니다.

  • 지정된 파일 URL에 지속되는 Realm 인스턴스를 가져옵니다.

    스로우

    Realm을 초기화할 수 없는 경우 NSError 입니다.

    선언

    스위프트

    public init(fileURL: URL) throws

    매개변수

    fileURL

    Realm을 저장해야 하는 파일의 로컬 URL입니다.

비동기

  • Realm을 비동기적으로 열고 지정된 대기열의 블록에 전달합니다.

    Realm을 비동기적으로 열면 주어진 대기열로 전달하기 전에 백그라운드 스레드에서 Realm을 사용 가능한 상태로 만드는 데 필요한 모든 작업 (예: 시간이 오래 걸릴 가능성이 있는 마이그레이션 실행)을 백그라운드 스레드에서 수행합니다. 또한 동기화된 Realm은 작업이 다운로드되기 시작했을 때 사용 가능한 모든 원격 콘텐츠를 로컬에서 사용할 수 있을 때까지 기다립니다.

    콜백 함수에 전달된 Realm은 Realm(configuration:queue:) 이(가) 사용된 것처럼 콜백 대기열에 제한됩니다.

    선언

    스위프트

    @discardableResult
    public static func asyncOpen(configuration: Realm.Configuration = .defaultConfiguration,
                                 callbackQueue: DispatchQueue = .main,
                                 callback: @escaping (Result<Realm, Swift.Error>) -> Void) -> AsyncOpenTask

    매개변수

    configuration

    Realm을 열 때 사용할 구성 객체입니다.

    callbackQueue

    콜백이 실행되어야 하는 디스패치 대기열입니다.

    callback

    콜백 차단입니다. Realm이 성공적으로 열린 경우 인수로 전달됩니다. 그렇지 않으면 무엇이 잘못되었는지 설명하는 Swift.Error 가 대신 블록에 전달됩니다.

    반환 값

    비동기 열기를 관찰하거나 취소하는 데 사용할 수 있는 작업 객체입니다.

  • Realm을 비동기적으로 열고 지정된 대기열의 블록에 전달합니다.

    Realm을 비동기적으로 열면 주어진 대기열로 전달하기 전에 백그라운드 스레드에서 Realm을 사용 가능한 상태로 만드는 데 필요한 모든 작업 (예: 시간이 오래 걸릴 가능성이 있는 마이그레이션 실행)을 백그라운드 스레드에서 수행합니다. 또한 동기화된 Realm은 작업이 다운로드되기 시작했을 때 사용 가능한 모든 원격 콘텐츠를 로컬에서 사용할 수 있을 때까지 기다립니다.

    발행자에게 전달된 Realm은 Realm(configuration:queue:) 이(가) 사용된 것처럼 콜백 대기열에 제한됩니다.

    선언

    스위프트

    @available(macOS 10.15, watchOS 6.0, iOS 13.0, iOSApplicationExtension 13.0, macOSApplicationExtension 10.15, tvOS 13.0, *)
    public static func asyncOpen(configuration: Realm.Configuration = .defaultConfiguration) -> RealmPublishers.AsyncOpenPublisher

    매개변수

    configuration

    Realm을 열 때 사용할 구성 객체입니다.

    callbackQueue

    AsyncOpenTask를 실행해야 하는 디스패치 대기열입니다.

    반환 값

    출판사. Realm이 성공적으로 열리면 구독자가 Realm을 수신합니다. 그렇지 않으면 무엇이 잘못되었는지 설명하는 Swift.Error 가 대신 업스트림으로 전달됩니다.

  • 비동기 열기를 관찰하거나 취소하는 데 사용할 수 있는 작업 객체입니다.

    동기화된 Realm이 비동기적으로 열리는 경우, 완료 콜백이 호출되기 전에 서버에서 Realm의 최신 상태가 다운로드됩니다. 이 작업 객체를 사용하여 다운로드 상태를 관찰하거나 다운로드를 취소할 수 있습니다. 동기화 세션 자체가 비동기적으로 생성되고 Realm.asyncOpen()이 반환될 때 아직 존재하지 않을 수 있으므로 동기화 세션을 통해 다운로드를 관찰하는 대신 이 함수를 사용해야 합니다.

    더 보기

    선언

    스위프트

    @frozen
    public struct AsyncOpenTask

트랜잭션

  • 쓰기 트랜잭션(write transaction) 내부의 지정된 블록에 포함된 작업을 수행합니다.

    차단에서 오류가 발생하면 트랜잭션이 취소되고 오류 이전의 모든 변경 사항이 롤백됩니다.

    각 Realm 파일에 대해 한 번에 하나의 쓰기 트랜잭션(write transaction)만 열 수 있습니다. 쓰기 트랜잭션(write transaction)은 중첩될 수 없으며 이미 쓰기 트랜잭션(write transaction) 중인 Realm에서 쓰기 트랜잭션(write transaction)을 시작하려고 하면 예외가 발생합니다. 다른 스레드나 다른 프로세스의 동일한 Realm 파일에 대한 Realm 인스턴스에서 write 을(를) 호출하면 현재 쓰기 트랜잭션(write transaction)이 완료되거나 취소될 때까지 차단됩니다.

    쓰기 트랜잭션(write transaction)을 시작하기 전에 write 은(는) 마치 refresh() 이(가) 호출된 것처럼 Realm 인스턴스를 최신 Realm 버전으로 업데이트하고 해당하는 경우 알림을 생성합니다. Realm이 이미 최신 상태인 경우에는 아무런 효과가 없습니다.

    관련 알림 토큰을 전달하여 이 쓰기 트랜잭션(write transaction)의 변경 사항에 대한 특정 알림 차단 알림을 건너뛸 수 있습니다. 이는 쓰기 트랜잭션(write transaction)이 UI에서 이미 변경된 내용을 저장하고 알림 차단이 동일한 변경 사항을 다시 적용하려고 시도하지 않도록 하려는 경우에 주로 유용합니다.

    이 함수에 전달되는 토큰은 쓰기 트랜잭션(write transaction)이 수행되는 동일한 스레드에 추가된 이 Realm에 대한 알림을 위한 것이어야 합니다. 다른 스레드에 대한 알림은 이 메서드를 사용하여 건너뛸 수 없습니다.

    스로우

    트랜잭션을 성공적으로 완료하지 못한 경우 NSError 입니다. block 가 발생하면 함수는 전파된 ErrorType 을 대신 발생시킵니다.

    선언

    스위프트

    @discardableResult
    public func write<Result>(withoutNotifying tokens: [NotificationToken] = [], _ block: (() throws -> Result)) throws -> Result

    매개변수

    tokens

    이 쓰기 트랜잭션(write transaction)의 변경 사항에 대한 알림을 받고 싶지 않은 콜백을 추가하여 반환된 알림 토큰의 배열입니다.

    block

    수행할 작업이 포함된 블록입니다.

    반환 값

    블록에서 반환된 값(있는 경우)입니다.

  • Realm에서 쓰기 트랜잭션(write transaction)을 시작합니다.

    각 Realm 파일에 대해 한 번에 하나의 쓰기 트랜잭션(write transaction)만 열 수 있습니다. 쓰기 트랜잭션(write transaction)은 중첩될 수 없으며 이미 쓰기 트랜잭션(write transaction) 중인 Realm에서 쓰기 트랜잭션(write transaction)을 시작하려고 하면 예외가 발생합니다. 다른 스레드나 다른 프로세스의 동일한 Realm 파일에 대한 Realm 인스턴스에서 beginWrite 을(를) 호출하면 현재 쓰기 트랜잭션(write transaction)이 완료되거나 취소될 때까지 차단됩니다.

    쓰기 트랜잭션(write transaction)을 시작하기 전에 beginWrite 은(는) 마치 refresh() 이(가) 호출된 것처럼 Realm 인스턴스를 최신 Realm 버전으로 업데이트하고 해당하는 경우 알림을 생성합니다. Realm이 이미 최신 상태인 경우에는 아무런 효과가 없습니다.

    쓰기 트랜잭션(write transaction)을 이벤트 루프의 여러 주기에 걸쳐 사용하는 것은 좋은 생각이 아니지만, 이렇게 하려면 쓰기 트랜잭션(write transaction)이 커밋될 때까지 쓰기 트랜잭션(write transaction)에 참여하는 Realm이 활성 상태로 유지되도록 해야 합니다.

    선언

    스위프트

    public func beginWrite()
  • 현재 쓰기 트랜잭션 (write transaction)의 모든 쓰기 작업을 커밋하고 트랜잭션을 종료합니다.

    변경 사항을 저장하고 쓰기 트랜잭션(write transaction)을 완료하면 이 특정 Realm 인스턴스에 등록된 모든 알림 블록이 동시에 호출됩니다. 다른 스레드의 Realm 인스턴스에 대한 알림 차단과 모든 Realm collection(현재 스레드의 collection 포함)에 등록된 차단은 동시에 호출되도록 예약됩니다.

    관련 알림 토큰을 전달하여 이 쓰기 트랜잭션(write transaction)의 변경 사항에 대한 특정 알림 차단 알림을 건너뛸 수 있습니다. 이는 쓰기 트랜잭션(write transaction)이 UI에서 이미 변경된 내용을 저장하고 알림 차단이 동일한 변경 사항을 다시 적용하려고 시도하지 않도록 하려는 경우에 주로 유용합니다.

    이 함수에 전달되는 토큰은 쓰기 트랜잭션(write transaction)이 수행되는 동일한 스레드에 추가된 이 Realm에 대한 알림을 위한 것이어야 합니다. 다른 스레드에 대한 알림은 이 메서드를 사용하여 건너뛸 수 없습니다.

    경고

    이 메서드는 쓰기 트랜잭션(write transaction) 중에만 호출할 수 있습니다.

    스로우

    디스크 공간 부족 또는 기타 I/O 오류로 인해 트랜잭션을 작성할 수 없는 경우 NSError 입니다.

    선언

    스위프트

    public func commitWrite(withoutNotifying tokens: [NotificationToken] = []) throws

    매개변수

    tokens

    이 쓰기 트랜잭션(write transaction)의 변경 사항에 대한 알림을 받고 싶지 않은 콜백을 추가하여 반환된 알림 토큰의 배열입니다.

  • 현재 쓰기 트랜잭션(write transaction)에서 이루어진 모든 쓰기를 되돌리고 트랜잭션을 종료합니다.

    이렇게 하면 Realm의 모든 객체가 쓰기 트랜잭션(write transaction)이 시작될 때의 상태로 롤백된 다음 트랜잭션이 종료됩니다.

    이렇게 하면 삭제된 객체에 대한 데이터가 복원되지만 무효화된 인스턴스는 되돌릴 수 없습니다. Realm에 추가된 모든 Object는 관리되지 않는 대신 무효화됩니다.

    다음 코드가 주어집니다.

    let oldObject = objects(ObjectType).first!
    let newObject = ObjectType()
    
    realm.beginWrite()
    realm.add(newObject)
    realm.delete(oldObject)
    realm.cancelWrite()
    

    및 모두 oldObjectnewObject 대해 을 true isInvalidated 반환하지만, 를 제공한 쿼리를 oldObject 다시 실행하면 유효한 객체를 다시 한 번 반환합니다.

    트랜잭션 중에 수정된 모든 객체에 대한 KVO 관찰자는 초기 값으로 다시 변경 사항에 대한 알림을 받지만 취소된 쓰기 트랜잭션으로 인해 다른 알림은 생성되지 않습니다.

    경고

    이 메서드는 쓰기 트랜잭션(write transaction) 중에만 호출할 수 있습니다.

    선언

    스위프트

    public func cancelWrite()
  • Realm이 현재 쓰기 트랜잭션(write transaction) 상태인지 여부를 나타냅니다.

    경고

    단순히 이 속성을 확인한 다음 객체를 생성, 업데이트 또는 제거해야 할 때마다 쓰기 트랜잭션(write transaction)을 시작하지 마십시오. 이로 인해 많은 수의 쓰기 트랜잭션(write transaction)이 생성되어 성능이 저하될 수 있습니다. 대신 항상 단일 트랜잭션 중에 여러 업데이트를 수행하는 것을 선호합니다.

    선언

    스위프트

    public var isInWriteTransaction: Bool { get }

객체 추가 및 생성

  • Realm에 추가되거나 Realm에서 생성되는 객체에 이미 존재하는 기본 키가 있는 경우 수행할 작업.

    더 보기

    선언

    스위프트

    @frozen
    public enum UpdatePolicy : Int
  • 이 Realm에 관리되지 않는 객체를 추가합니다.

    동일한 프라이머리 키를 가진 객체가 이 Realm에 이미 존재하는 경우, 선택한 UpdatePolicy )로 지정된 대로 이 객체의 속성 값으로 업데이트됩니다. 기본 키가 없는 객체에 대한 업데이트 정책은 .error 이어야 합니다.

    Realm에 객체를 추가하면 해당 객체가 참조하는 모든 하위 관계도 추가됩니다( ObjectList<Object> 속성을 통해). 또한 해당 객체는 이 Realm에 추가하려면 유효한 객체여야 하며 update: 매개변수의 값은 해당 추가에 전파됩니다.

    추가할 객체는 관리되지 않는 객체이거나 이 Realm에서 이미 관리되는 유효한 객체여야 합니다. 이 Realm에서 이미 관리되는 객체를 추가하는 것은 작동하지 않지만 다른 Realm에서 관리하거나 Realm에서 삭제된 객체(예: isInvalidatedtrue 인 객체)를 추가하는 것은 오류입니다.

    managed 객체를 한 Realm에서 다른 Realm으로 복사하려면 대신 create() 를 사용합니다.

    경고

    이 메서드는 쓰기 트랜잭션(write transaction) 중에만 호출할 수 있습니다.

    선언

    스위프트

    public func add(_ object: Object, update: UpdatePolicy = .error)

    매개변수

    object

    이 Realm에 추가할 객체입니다.

    update

    What to do if an object with the same primary key alredy exists. Must be .error for objects without a primary key.

  • collection의 모든 객체를 Realm에 추가합니다.

    ~를 참조하세요.

    add(_:update:)

    경고

    이 메서드는 쓰기 트랜잭션(write transaction) 중에만 호출할 수 있습니다.

    선언

    스위프트

    public func add<S>(_ objects: S, update: UpdatePolicy = .error) where S : Sequence, S.Element : Object

    매개변수

    objects

    Realm에 추가할 객체가 포함된 시퀀스입니다.

    update

    How to handle objects in the collection with a primary key that alredy exists in this Realm. Must be .error for object types without a primary key.

    update

    How to handle objects in the collection with a primary key that alredy exists in this Realm. Must be .error for object types without a primary key.

  • 주어진 값을 사용하여 Realm 객체를 생성하여 Realm에 추가하고 반환합니다.

    value 인수는 Realm 객체, 키-값 코딩을 준수하는 객체, NSJSONSerialization 의 메서드에서 반환된 배열 또는 사전 또는 각 managed 속성에 대해 하나의 요소를 포함하는 Array 일 수 있습니다. LinkingObjects 인스턴스를 단독으로 또는 컬렉션의 구성원으로 전달하지 않도록 합니다. value 인수가 배열인 경우 모든 속성이 존재하고 유효해야 하며 모델에 정의된 속성과 동일한 순서여야 합니다.

    Realm 객체 유형에 기본 키가 없거나 지정된 기본 키를 가진 객체가 이미 존재하지 않으면 Realm에 새 객체가 만들어집니다. 지정된 기본 키를 가진 객체가 Realm에 이미 존재하고 업데이트 정책이 .modified 또는 .all 인 경우 기존 객체가 업데이트되고 해당 객체에 대한 참고가 반환됩니다.

    객체를 업데이트하는 경우 키-값 코딩을 사용하여 value 에서 복사하여 해당 스키마에 정의된 모든 속성이 설정됩니다. 지정된 속성 이름(또는 게터 이름이 정의된 경우)에 대해 value 인수가 value(forKey:) 에 응답하지 않는 경우 해당 값은 변경되지 않습니다. NSNull 을 업데이트된 값으로 사용하거나 ( Object 서브클래스의 인스턴스를 전달하는 경우) value 의 해당 속성을 nil로 설정하여 객체의 Null 허용 속성을 nil로 설정할 수 있습니다.

    경고

    이 메서드는 쓰기 트랜잭션(write transaction) 중에만 호출할 수 있습니다.

    선언

    스위프트

    @discardableResult
    public func create<T>(_ type: T.Type, value: Any = [:], update: UpdatePolicy = .error) -> T where T : Object

    매개변수

    type

    생성할 객체의 유형입니다.

    value

    객체를 채우는 데 사용되는 값입니다.

    update

    What to do if an object with the same primary key alredy exists. Must be .error for object types without a primary key.

    반환 값

    새로 생성된 객체입니다.

객체 삭제

  • Realm에서 객체를 삭제합니다. 객체가 삭제되면 무효화된 것으로 간주됩니다.

    경고

    이 메서드는 쓰기 트랜잭션(write transaction) 중에만 호출할 수 있습니다.

    선언

    스위프트

    public func delete(_ object: ObjectBase)

    매개변수

    object

    삭제할 객체입니다.

  • Realm에서 0개 이상의 객체를 삭제합니다.

    Do not pass in a slice to a Results or any other auto-updating Realm collection type (for example, the type returned by the Swift suffix(_:) standard library method). 대신 Array() 를 사용하여 삭제할 객체의 복사본을 만들고 대신 전달합니다. 뷰를 자동 업데이트 collection에 직접 전달하면 '인덱스 범위 초과' 예외가 발생할 수 있습니다.

    경고

    이 메서드는 쓰기 트랜잭션(write transaction) 중에만 호출할 수 있습니다.

    선언

    스위프트

    public func delete<S>(_ objects: S) where S : Sequence, S.Element : ObjectBase

    매개변수

    objects

    삭제할 객체입니다. 이는 List<Object>, Results<Object> 또는 요소가 Object인 다른 Swift Sequence 일 수 있습니다(위의 주의 사항이 적용될 수 있음).

  • Realm에서 모든 객체를 삭제합니다.

    경고

    이 메서드는 쓰기 트랜잭션(write transaction) 중에만 호출할 수 있습니다.

    선언

    스위프트

    public func deleteAll()

객체 조회

  • Realm에 저장된 특정 유형의 모든 객체를 반환합니다.

    선언

    스위프트

    public func objects<Element>(_ type: Element.Type) -> Results<Element> where Element : Object

    매개변수

    type

    반환할 객체의 유형입니다.

    반환 값

    객체를 포함하는 Results 입니다.

  • Realm에서 지정된 기본 키를 사용하여 지정된 Realm 객체 유형의 단일 인스턴스를 조회합니다.

    이 메서드를 사용하려면 지정된 객체 클래스에서 primaryKey() 을(를) 재정의해야 합니다.

    ~를 참조하세요.

    Object.primaryKey()

    선언

    스위프트

    public func object<Element, KeyType>(ofType type: Element.Type, forPrimaryKey key: KeyType) -> Element? where Element : Object

    매개변수

    type

    반환할 객체의 유형입니다.

    key

    원하는 객체의 기본 키.

    반환 값

    type 유형의 객체이거나, 지정된 기본 키를 가진 인스턴스가 없는 경우 nil 입니다.

알림

  • 이 Realm의 변경 사항에 대한 알림 핸들러를 추가하고 알림 토큰을 반환합니다.

    알림 핸들러는 스레드나 프로세스와 관계없이 각 쓰기 트랜잭션(write transaction)이 커밋된 후에 호출됩니다.

    핸들러 블록은 추가된 동일한 스레드에서 호출되며 현재 이벤트 루프 내에 있는 스레드에만 추가할 수 있습니다. 백그라운드 스레드에서 이벤트 루프를 구체적으로 생성하고 실행하는 경우가 아니라면 일반적으로 메인 스레드만 사용합니다.

    이벤트 루프가 다른 활동에 의해 차단되어 있는 한 알림을 전달할 수 없습니다. 알림을 즉시 전달할 수 없는 경우 여러 알림이 병합될 수 있습니다.

    블록에 업데이트를 전송하려는 한 반환된 토큰을 보관해야 합니다. 업데이트 수신을 중지하려면 토큰에서 invalidate() 을 호출합니다.

    선언

    스위프트

    public func observe(_ block: @escaping NotificationBlock) -> NotificationToken

    매개변수

    block

    Realm 알림을 처리하기 위해 호출되는 차단입니다. 다음 매개변수를 수신합니다: notification: 수신 알림. realm: 알림이 발생한 Realm입니다.

    반환 값

    변경 알림을 계속 받으려면 오랫동안 보유해야 하는 토큰입니다.

자동 새로 고침 및 새로 고침

  • 다른 스레드에 변경 사항이 발생할 때 이 Realm을 자동으로 업데이트하려면 이 속성을 true 로 설정합니다.

    true (기본값)으로 설정하면 변경 사항이 커밋된 후 이벤트 루프의 다음 주기에서 다른 스레드에서 변경된 내용이 이 Realm에 반영됩니다. false 로 설정된 경우 Realm에서 refresh() 를 수동으로 호출하여 최신 데이터를 가져오도록 업데이트해야 합니다.

    기본적으로 백그라운드 스레드에는 활성 런 루프가 없으며 autorefreshtrue 로 설정되어 있더라도 최신 버전으로 업데이트하려면 refresh() 를 수동으로 호출해야 합니다.

    이 속성이 활성화된 경우에도 자동 새로 고침이 발생하기 전에 언제든지 refresh() 를 호출하여 Realm을 업데이트할 수 있습니다.

    자동 새로 고침의 활성화 여부에 관계없이 쓰기 트랜잭션(write transaction)이 커밋되면 알림이 전송됩니다.

    Realm 에 대한 강력한 참조 없이 autorefresh 을 비활성화하면 아무런 효과가 없으며 autorefresh 는 다음에 Realm이 생성될 때 true 로 되돌아갑니다. 이는 새로 고칠 것이 없음을 의미하므로 일반적으로 관련이 없지만(관리되는 Object , ListResults 은(는) 이를 관리하는 Realm 에 대한 강력한 참조를 가지고 있음), 를 autorefresh = false 이후에만 application(_:didFinishLaunchingWithOptions:) 객체를 저장하는 것이 작동하지 않습니다.

    기본값은 true입니다.

    선언

    스위프트

    public var autorefresh: Bool { get nonmutating set }
  • 가장 최근 데이터를 점으로 Realm과 Realm에서 managed 객체를 업데이트합니다.

    선언

    스위프트

    @discardableResult
    public func refresh() -> Bool

    반환 값

    Realm에 대한 업데이트가 있는지 여부. 실제로 변경된 데이터가 없더라도 true 가 반환될 수 있습니다.

프로즌 Realms

  • 이 Realm이 동결된 경우 반환합니다.

    선언

    스위프트

    public var isFrozen: Bool { get }
  • 이 Realm의 동결(불변) 스냅샷을 반환합니다.

    동결된 Realm은 Realm 데이터의 특정 버전에 대한 변경할 수 없는 스냅샷 보기입니다. 일반 Realm 인스턴스와 달리 Realm에 작성된 쓰기를 반영하여 실시간 업데이트되지 않으며 모든 스레드에서 액세스할 수 있습니다. 동결된 Realm에 쓰는 것은 허용되지 않으며 쓰기 트랜잭션(write transaction)을 시작하려고 하면 예외가 발생합니다.

    동결된 Realm에서 읽은 모든 객체와 collection도 동결됩니다.

    경고

    Realm에서 쓰기 트랜잭션(write transaction)을 수행하는 동안 동결된 Realm을 오랫동안 유지하면 Realm 파일 크기가 커질 수 있습니다. 자세한 내용은 Realm.Configuration.maximumNumberOfActiveVersions 를 참조하세요.

    선언

    스위프트

    public func freeze() -> Realm
  • 이 Realm의 라이브(변경 가능) 참고를 반환합니다.

    반환된 Realm 참고에서 읽은 모든 객체와 collection이 더 이상 동결되지 않습니다. 아직 동결되지 않은 Realm에서 호출되면 자신을 반환합니다.

    선언

    스위프트

    public func thaw() -> Realm
  • 지정된 객체의 동결(불변) 스냅샷을 반환합니다.

    동결 사본은 불변의 객체로, 이 객체는 주어진 객체가 현재 포함하고 있는 것과 동일한 데이터를 포함하지만 포함 Realm에 기록할 때 업데이트되지 않습니다. 라이브 객체와 달리 동결 객체는 모든 스레드에서 액세스할 수 있습니다.

    경고

    Realm에서 쓰기 트랜잭션(write transaction)을 수행하는 동안 동결된 객체를 오랫동안 유지하면 Realm 파일 크기가 커질 수 있습니다. 자세한 내용은 Realm.Configuration.maximumNumberOfActiveVersions 를 참조하세요.

    선언

    스위프트

    public func freeze<T>(_ obj: T) -> T where T : ObjectBase
  • 이 객체의 라이브(변경 가능) 참고를 반환합니다.

    이 메서드는 동일한 동결된 객체의 라이브 복사본에 대한 managed 접근자를 만듭니다. 이미 라이브 객체에 대해 호출되면 자체를 반환합니다.

    선언

    스위프트

    public func thaw<T>(_ obj: T) -> T? where T : ObjectBase
  • 지정된 컬렉션의 동결(불변) 스냅샷을 반환합니다.

    동결 사본은 변경이 불가능한 컬렉션으로, 해당 컬렉션은 현재 포함된 것과 동일한 데이터를 포함하지만 포함 Realm에 쓰기가 이루어질 때 업데이트되지 않습니다. 라이브 컬렉션과 달리 동결 컬렉션은 모든 스레드에서 액세스할 수 있습니다.

    경고

    쓰기 트랜잭션(write transaction) 중에는 또는 Realm이 읽기 전용일 때는 이 메서드를 호출할 수 없습니다.

    경고

    Realm에서 쓰기 트랜잭션(write transaction)을 수행하는 동안 동결된 컬렉션을 오랫동안 유지하면 Realm 파일 크기가 커질 수 있습니다. 자세한 내용은 Realm.Configuration.maximumNumberOfActiveVersions 를 참조하세요.

    선언

    스위프트

    public func freeze<Collection>(_ collection: Collection) -> Collection where Collection : RealmCollection

무효화

  • Realm에서 모든 Object , Results, LinkingObjectsList를 managed합니다.

    Realm은 자신이 액세스하는 데이터 버전에 대한 읽기 잠금을 보유하므로 다른 스레드에서 Realm을 변경해도 이 Realm에 표시되는 데이터가 수정되거나 삭제되지 않습니다. 이 메서드를 호출하면 읽기 잠금 (read lock)이 해제되어 파일을 늘리는 대신 디스크에 사용된 공간을 나중에 쓰기 트랜잭션 (write transaction)에서 재사용할 수 있습니다. 이 메서드는 더 이상 필요하지 않은 Realm에서 이전에 데이터를 읽은 백그라운드 스레드에서 긴 차단 작업을 수행하기 전에 호출해야 합니다.

    현재 스레드의 이 Realm 인스턴스에서 얻은 모든 Object, ResultsList 인스턴스가 무효화됩니다. ObjectArray는 사용할 수 없습니다. Results 이 비어 있게 됩니다. Realm 자체는 유효한 상태로 유지되며 다음에 Realm에서 데이터를 읽을 때 새 읽기 트랜잭션(read transaction)이 암시적으로 시작됩니다.

    Realm에서 데이터를 읽지 않거나 Realm에서 데이터를 읽기 전에 이 메서드를 연속으로 여러 번 호출하는 것은 작동하지 않습니다.

    선언

    스위프트

    public func invalidate()

파일 관리

  • Realm의 압축되고 선택적으로 암호화된 사본을 지정된 로컬 URL에 씁니다.

    대상 파일이 이미 존재할 수 없습니다.

    쓰기 트랜잭션 (write transaction) 내에서 이 메서드를 호출하면 이전 쓰기 트랜잭션 (write transaction)이 커밋된 점의 데이터가 아닌 현재 데이터가 기록됩니다.

    스로우

    사본을 쓸 수 없는 경우 NSError 입니다.

    선언

    스위프트

    public func writeCopy(toFile fileURL: URL, encryptionKey: Data? = nil) throws

    매개변수

    fileURL

    Realm을 저장할 로컬 URL입니다.

    encryptionKey

    새 파일을 암호화할 64바이트 암호화 키(선택 사항)입니다.

  • 지정된 구성에 대한 Realm 파일이 디스크에 로컬로 존재하는지 확인합니다.

    동기화되지 않고 인메모리가 아닌 Realm의 경우 FileManager.default.fileExists(atPath:) 에 해당합니다. 동기화된 Realm의 경우, Realm을 열 때 수행되는 것처럼 서버, 가상 경로, 사용자를 기반으로 디스크의 실제 경로를 계산하는 작업을 처리합니다.

    @param config 존재를 확인할 Realm 구성입니다. @return 지정된 구성에 대한 Realm 파일이 디스크에 있으면 true, 그렇지 않으면 false를 반환합니다.

    선언

    스위프트

    public static func fileExists(for config: Configuration) -> Bool
  • 지정된 구성에 대한 로컬 Realm 파일과 관련 임시 파일을 삭제합니다.

    이렇게 하면 지정된 구성으로 Realm을 열 때 생성될 수 있는 '영역', '.note', '.management' 파일이 삭제됩니다. '잠금' 파일(영구 데이터가 포함되어 있지 않으며 Realm 파일을 열 때마다 처음부터 다시 생성됨)은 삭제하지 않습니다.

    Realm은 현재 어떤 스레드나 다른 프로세스에서 열려 있지 않아야 합니다. 일치하는 경우 .alreadyOpen 오류가 발생합니다. 삭제가 진행되는 동안 다른 스레드에서 Realm을 열려고 시도하면 차단되고, 새 Realm을 만들고 나중에 엽니다.

    Realm이 이미 존재하지 않으면 false 을 반환합니다.

    @param config 삭제할 Realm을 식별하는 Realm 구성입니다. @return 삭제된 파일이 있으면 true를 반환하고, 그렇지 않으면 false를 반환합니다.

    선언

    스위프트

    public static func deleteFiles(for config: Configuration) throws -> Bool

Realm

  • 객체가 변경될 때마다 Void를 방출하는 출판사입니다.

    이름과 달리 실제로 collection 변경된 후에 방출합니다.

    선언

    스위프트

    public var objectWillChange: RealmPublishers.RealmWillChange { get }
  • Realm 오류 도메인 내의 오류 코드를 설명하는 구조체입니다. 이 값은 특히 Realm 인스턴스를 초기화할 때 발생하는 다양한 복구 가능한 오류를 포착하는 데 사용할 수 있습니다.

    let realm: Realm?
    do {
        realm = try Realm()
    } catch Realm.Error.incompatibleLockFile {
        print("Realm Browser app may be attached to Realm on device?")
    }
    
    더 보기

    선언

    스위프트

    @frozen
    public struct Error
    extension Realm.Error: Equatable
  • 지정된 경로의 Realm에서 지정된 Realm 구성의 마이그레이션 블록을 수행합니다.

    이 메서드는 Realm을 처음 열 때 자동으로 호출되며 명시적으로 호출할 필요가 없습니다. 이 메서드를 호출하도록 선택하여 마이그레이션이 수행되는 정확한 시기와 방법을 제어할 수 있습니다.

    선언

    스위프트

    public static func performMigration(for configuration: Realm.Configuration = Realm.Configuration.defaultConfiguration) throws

    매개변수

    configuration

    Realm을 열고 마이그레이션하는 데 사용되는 Realm 구성입니다.

Equatable

  • 두 개의 Realm 인스턴스가 동일한지 여부를 반환합니다.

    선언

    스위프트

    public static func == (lhs: Realm, rhs: Realm) -> Bool

알림

  • Realm이 변경되었음을 나타내는 알림입니다.

    더 보기

    선언

    스위프트

    @frozen
    public enum Notification : String
  • Configuration 인스턴스는 Realm의 인스턴스를 만드는 데 사용되는 다양한 옵션을 설명합니다.

    Configuration 인스턴스는 일반 Swift 구조체에 불과합니다. RealmObject와 달리 변경하지 않는 한 스레드 간에 자유롭게 공유할 수 있습니다.

    objectClasses 속성을 설정하여 클래스 하위 집합에 대한 구성 값을 만드는 데는 많은 비용이 소요될 수 있습니다. 이 때문에 일반적으로 Realm을 열 때마다 새 값을 생성하는 대신 각 개별 구성에 대해 단일 구성 값을 캐시하고 재사용하는 것이 좋습니다.

    더 보기

    선언

    스위프트

    @frozen
    public struct Configuration
    extension Realm.Configuration: CustomStringConvertible
    extension Realm.Configuration: Equatable
  • 이 Realm에서 사용하는 SyncSession을 가져옵니다. 동기화된 Realm이 아닌 경우 nil이 됩니다.

    선언

    스위프트

    public var syncSession: SyncSession? { get }

스레드 세이프 참고

  • ThreadSafeReference 가 처음 생성될 때 참고된 객체와 동일한 객체를 반환하지만 이 스레드의 현재 Realm에 대해 확인됩니다. 참고가 생성된 후 이 객체가 삭제된 경우 nil 을(를) 반환합니다.

    경고

    ThreadSafeReference 객체는 최대 한 번만 해석되어야 합니다. ThreadSafeReference 확인에 실패하면 참고 할당이 해제될 때까지 Realm의 소스 버전이 고정됩니다. 참고가 두 번 이상 확인되면 예외가 발생합니다.

    경고

    쓰기 트랜잭션(write transaction) 내에서는 호출할 수 없습니다.

    참고

    소스 Realm이 이 버전보다 이후 버전인 경우 이 Realm을 새로 고칩니다.

    ~를 참조하세요.

    ThreadSafeReference(to:)

    선언

    스위프트

    public func resolve<Confined>(_ reference: ThreadSafeReference<Confined>) -> Confined? where Confined : ThreadConfined

    매개변수

    reference

    이 Realm에서 확인할 스레드에 한정된 객체에 대한 스레드 세이프 참고입니다.