Об этом проекте
# О базе данных 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), чтобы поделиться своими мыслями!_**
**_А если он вам не нравится, пожалуйста, сообщите нам, что вы хотели бы улучшить, чтобы мы могли это исправить!_**
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.