这个项目能做什么

# 关于 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'") ``` ## 快速开始 我们支持通过 Swift Package Manager、CocoaPods、Carthage 或导入动态 XCFramework 来安装 Realm。 更多信息,请参阅我们的[快速开始](docs/guides/quick-start.md)。 ## 文档 文档可以在 [docs/](docs/README.md) 目录中找到。 API 参考文档可以通过 [jazzy](https://github.com/realm/jazzy/) 从源代码生成,只需在本仓库根目录运行 `sh build.sh docs`。 ## 获取帮助 - **代码需要帮助?**:在 Stack Overflow 上查找带有 [`realm` 标签](https://stackoverflow.com/questions/tagged/realm?sort=newest)的以往问题,或[提出新问题](https://stackoverflow.com/questions/ask?tags=realm)。对于可能被认为对 Stack Overflow 来说过于宽泛的一般性讨论,请使用[社区论坛](https://developer.mongodb.com/community/forums/tags/c/realm-sdks/58/swift/)。 - **有 bug 要报告?** [提交 GitHub issue](https://github.com/realm/realm-swift/issues/new)。如果可能,请包含 Realm 版本、完整日志、Realm 文件以及一个能展示该问题的项目。 - **有功能请求?** [提交 GitHub issue](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 时需要互联网连接以下载核心二进制文件。这将在 `build/Release/` 中生成 Realm.xcframework 和 RealmSwift.xcframework。 运行 `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) 的推文来分享你的想法!_** **_如果你不喜欢它,请告诉我们你希望改进什么,以便我们修复它!_**