ITADN
realm/realm-swift
realm/realm-swift · 文件 下载 ZIP
文件最后提交记录最后更新时间
README.md
以下内容由 AI 翻译,如有问题请点此提交 issue 反馈
realm

关于 Realm 数据库

Realm 是一款可直接运行在手机、平板电脑或可穿戴设备中的移动数据库。 本仓库包含 Realm Swift 和 Realm Objective-C 的 iOS、macOS、tvOS 和 watchOS 版本的源代码。

为什么使用 Realm

  • 对开发者直观易用: Realm 的面向对象数据模型易于学习,无需 ORM,并且能让你编写更少的代码。
  • 专为移动设备打造: Realm 功能齐全、轻量级,并高效利用内存、磁盘空间和电池寿命。
  • 专为离线使用设计: Realm 的本地数据库将数据持久化到磁盘,因此应用离线时的表现与在线时一样好。

面向对象:简化你的代码

Realm 专为移动开发者打造,以简洁为核心。其惯用的面向对象数据模型可以为你节省数千行代码。

// Define your models like regular Swift classes
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
    // Create relationships by pointing an Object field to another Class
    @Persisted var dogs: List<Dog>
}
// Use them like regular Swift objects
let dog = Dog()
dog.name = "Rex"
dog.age = 1
print("name of dog: \(dog.name)")

// Get the default Realm
let realm = try! Realm()
// Persist your data easily with a write transaction
try! realm.write {
    realm.add(dog)
}

实时对象:构建响应式应用

Realm 的实时对象意味着在任何地方更新的数据都会自动在所有地方更新。

// Open the default realm.
let realm = try! Realm()

var token: NotificationToken?

let dog = Dog()
dog.name = "Max"

// Create a dog in the realm.
try! realm.write {
    realm.add(dog)
}

//  Set up the listener & observe object notifications.
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.")
    }
}

// Update the dog's name to see the effect.
try! realm.write {
    dog.name = "Wolfie"
}

SwiftUI

Realm 直接与 SwiftUI 集成,自动更新你的视图,无需你手动操作。

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())
            }
        )
    }
}

完全加密

数据可以在传输中和静态时进行加密,确保即使是最敏感的数据也保持安全。

// Generate a random encryption key
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)
}

// Add the encryption key to the config and open the realm
let config = Realm.Configuration(encryptionKey: key)
let realm = try Realm(configuration: config)

// Use the Realm as normal
let dogs = realm.objects(Dog.self).filter("name contains 'Fido'")

入门指南

我们支持通过 Swift Package Manager、CocoaPods、Carthage 或导入动态 XCFramework 来安装 Realm。

更多信息,请参阅我们的 快速入门

文档

文档可以在 docs/ 目录中找到。

API 参考文档可以使用 jazzy 通过在本仓库根目录运行 sh build.sh docs 从源代码生成。

获取帮助

  • 需要代码方面的帮助?: 在 Stack Overflow 上查找带有realm 标签 的过往问题,或提出一个新问题。对于可能被认为对 Stack Overflow 而言过于宽泛的一般性讨论,请使用社区论坛
  • 有 bug 需要报告? 在 GitHub 上提交 issue。如果可能,请包含 Realm 的版本、完整的日志、Realm 文件以及一个展示该问题的项目。
  • 有功能请求? 在 GitHub 上提交 issue。告诉我们该功能应该做什么以及你为什么想要这个功能。

构建 Realm

如果你不想使用预编译版本,你可以从源代码自行构建 Realm。

先决条件:

  • 构建 Realm 需要 Xcode 15.3 或更高版本。
  • 构建 Realm 文档需要 jazzy

一旦你拥有了所有必要的先决条件,构建 Realm 只需一条命令:sh build.sh build。 首次构建 Realm 时需要互联网连接以下载核心二进制文件。 这将在 build/Release/ 中生成 Realm.xcframework 和 RealmSwift.xcframework。

运行 sh build.sh help 以查看你可以执行的所有操作(构建 ios/osx、生成文档、测试等)。

贡献

有关更多详细信息,请参阅 CONTRIBUTING.md

行为准则

本项目遵循 MongoDB 行为准则。 参与本项目即表示您承诺遵守该准则。请将 不当行为报告至 community-conduct@mongodb.com

License

Realm Objective-C 和 Realm Swift 依据 Apache 2.0 许可证发布。 Realm Core 同样依据 Apache 2.0 许可证发布,并可在 此处获取。

Feedback

如果您使用 Realm 并且感到满意,请考虑发布一条提及 @realm 的推文来分享您的想法!

如果您不满意,请告诉我们您希望改进的地方,以便我们进行修复!