Об этом проекте

# О базе данных Realm Realm — это мобильная база данных, работающая непосредственно внутри телефонов, планшетов и носимых устройств. В этом репозитории содержится исходный код версий Realm Swift и Realm Objective-C для iOS, macOS, tvOS и watchOS. ## Почему стоит использовать Realm * **Понятность для разработчиков:** объектно-ориентированная модель данных Realm проста в изучении, не требует ORM и позволяет писать меньше кода. * **Создана для мобильных устройств:** Realm обладает полным набором функций, лёгкая и эффективно использует память, дисковое пространство и заряд батареи. * **Создана для работы офлайн:** локальная база данных Realm сохраняет данные на диске, поэтому приложения работают офлайн так же хорошо, как и онлайн. ## Объектно-ориентированность: упростите свой код Realm создавалась для мобильных разработчиков с упором на простоту. Идиоматичная объектно-ориентированная модель данных может сэкономить вам тысячи строк кода. ```swift // Определяйте модели как обычные классы Swift class Dog: Object { @Persisted var name: String @Persisted var age: Int } class Person: Object { @Persisted(primaryKey: true) var _id: String @Persisted var name: String @Persisted var age: Int // Создавайте связи, указывая поле Object на другой класс @Persisted var dogs: List<Dog> } // Используйте их как обычные объекты Swift let dog = Dog() dog.name = "Rex" dog.age = 1 print("name of dog: \(dog.name)") // Получите Realm по умолчанию let realm = try! Realm() // Легко сохраняйте данные с помощью транзакции записи try! realm.write { realm.add(dog) } ``` ## Живые объекты: создавайте реактивные приложения Живые объекты Realm означают, что данные, обновлённые где угодно, автоматически обновляются везде. ```swift // Откройте Realm по умолчанию. let realm = try! Realm() var token: NotificationToken? let dog = Dog() dog.name = "Max" // Создайте собаку в realm. try! realm.write { realm.add(dog) } // Настройте слушатель и наблюдайте за уведомлениями объекта. token = dog.observe { change in switch change { case .change(let properties): for property in properties { print("Property '\(property.name)' changed to '\(property.newValue!)'"); } case .error(let error): print("An error occurred: (error)") case .deleted: print("The object was deleted.") } } // Обновите имя собаки, чтобы увидеть эффект. try! realm.write { dog.name = "Wolfie" } ``` ### SwiftUI Realm напрямую интегрируется со SwiftUI, обновляя ваши представления, так что вам не нужно делать это самим. ```swift struct ContactsView: View { @ObservedResults(Person.self) var persons var body: some View { List { ForEach(persons) { person in Text(person.name) } .onMove(perform: $persons.move) .onDelete(perform: $persons.remove) }.navigationBarItems(trailing: Button("Add") { $persons.append(Person()) } ) } } ``` ## Полное шифрование Данные могут быть зашифрованы при передаче и при хранении, что обеспечивает безопасность даже самых чувствительных данных. ```swift // Сгенерируйте случайный ключ шифрования var key = Data(count: 64) _ = key.withUnsafeMutableBytes { (pointer: UnsafeMutableRawBufferPointer) in guard let baseAddress = pointer.baseAddress else { fatalError("Failed to obtain base address") } SecRandomCopyBytes(kSecRandomDefault, 64, baseAddress) } // Добавьте ключ шифрования в конфигурацию и откройте realm let config = Realm.Configuration(encryptionKey: key) let realm = try Realm(configuration: config) // Используйте Realm как обычно let dogs = realm.objects(Dog.self).filter("name contains 'Fido'") ``` ## Начало работы Мы поддерживаем установку Realm через Swift Package Manager, CocoaPods, Carthage или путём импорта динамического XCFramework. Для получения дополнительной информации см. наш [Quick Start](docs/guides/quick-start.md). ## Документация Документацию можно найти в каталоге [docs/](docs/README.md). Справочник по API можно сгенерировать из исходного кода с помощью [jazzy](https://github.com/realm/jazzy/), выполнив `sh build.sh docs` из корня этого репозитория. ## Получение помощи - **Нужна помощь с вашим кодом?**: Поищите предыдущие вопросы с тегом [`realm`](https://stackoverflow.com/questions/tagged/realm?sort=newest) на Stack Overflow или [задайте новый вопрос](https://stackoverflow.com/questions/ask?tags=realm). Для общего обсуждения, которое может считаться слишком широким для Stack Overflow, используйте [Форум сообщества](https://developer.mongodb.com/community/forums/tags/c/realm-sdks/58/swift/). - **Есть ошибка для сообщения?** [Откройте issue на GitHub](https://github.com/realm/realm-swift/issues/new). Если возможно, укажите версию Realm, полный лог, файл Realm и проект, демонстрирующий проблему. - **Есть запрос на функцию?** [Откройте issue на GitHub](https://github.com/realm/realm-swift/issues/new). Расскажите, что должна делать функция и почему вы хотите эту функцию. ## Сборка Realm Если вы не хотите использовать предкомпилированную версию, вы можете собрать Realm самостоятельно из исходного кода. Предварительные требования: * Для сборки Realm требуется Xcode 15.3 или новее. * Для сборки документации Realm требуется [jazzy](https://github.com/realm/jazzy) Как только у вас есть все необходимые предварительные требования, сборка Realm занимает всего одну команду: `sh build.sh build`. При первой сборке Realm вам понадобится подключение к интернету для загрузки основного бинарного файла. Это создаст Realm.xcframework и RealmSwift.xcframework в `build/Release/`. Запустите `sh build.sh help`, чтобы увидеть все действия, которые вы можете выполнить (сборка ios/osx, генерация документации, тестирование и т. д.). ## Участие в разработке См. [CONTRIBUTING.md](CONTRIBUTING.md) для получения более подробной информации! ## Кодекс поведения Этот проект придерживается [Кодекса поведения MongoDB](https://www.mongodb.com/community-code-of-conduct). Участвуя в нём, вы обязуетесь соблюдать этот кодекс. Пожалуйста, сообщайте о неприемлемом поведении на [community-conduct@mongodb.com](mailto:community-conduct@mongodb.com). ## Лицензия Realm Objective-C и Realm Swift публикуются под лицензией Apache 2.0. Realm Core также публикуется под лицензией Apache 2.0 и доступен [здесь](https://github.com/realm/realm-core). ## Обратная связь **_Если вы используете Realm и довольны им, пожалуйста, подумайте о том, чтобы отправить твит с упоминанием [@realm](https://twitter.com/realm), чтобы поделиться своими мыслями!_** **_А если он вам не нравится, пожалуйста, сообщите нам, что вы хотели бы улучшить, чтобы мы могли это исправить!_**