这个项目能做什么
# 关于 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) 的推文来分享你的想法!_**
**_如果你不喜欢它,请告诉我们你希望改进什么,以便我们修复它!_**
评论
0 评分人数达到10人后显示
登录后参与讨论。