12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- ////////////////////////////////////////////////////////////////////////////
- //
- // Copyright 2014 Realm Inc.
- //
- // Licensed under the Apache License, Version 2.0 (the "License");
- // you may not use this file except in compliance with the License.
- // You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
- //
- ////////////////////////////////////////////////////////////////////////////
- import Foundation
- import Realm
- /**
- This class represents Realm model object schemas.
- When using Realm, `ObjectSchema` instances allow performing migrations and introspecting the database's schema.
- Object schemas map to tables in the core database.
- */
- public struct ObjectSchema: CustomStringConvertible {
- // MARK: Properties
- internal let rlmObjectSchema: RLMObjectSchema
- /**
- An array of `Property` instances representing the managed properties of a class described by the schema.
- - see: `Property`
- */
- public var properties: [Property] {
- return rlmObjectSchema.properties.map { Property($0) }
- }
- /// The name of the class the schema describes.
- public var className: String { return rlmObjectSchema.className }
- /// The property which serves as the primary key for the class the schema describes, if any.
- public var primaryKeyProperty: Property? {
- if let rlmProperty = rlmObjectSchema.primaryKeyProperty {
- return Property(rlmProperty)
- }
- return nil
- }
- /// A human-readable description of the properties contained in the object schema.
- public var description: String { return rlmObjectSchema.description }
- // MARK: Initializers
- internal init(_ rlmObjectSchema: RLMObjectSchema) {
- self.rlmObjectSchema = rlmObjectSchema
- }
- // MARK: Property Retrieval
- /// Returns the property with the given name, if it exists.
- public subscript(propertyName: String) -> Property? {
- if let rlmProperty = rlmObjectSchema[propertyName] {
- return Property(rlmProperty)
- }
- return nil
- }
- }
- // MARK: Equatable
- extension ObjectSchema: Equatable {
- /// Returns whether the two object schemas are equal.
- public static func == (lhs: ObjectSchema, rhs: ObjectSchema) -> Bool {
- return lhs.rlmObjectSchema.isEqual(to: rhs.rlmObjectSchema)
- }
- }
|