Realm是一个直接在手机、平板或可穿戴设备上运行的移动数据库。此存储库包含iOS、macOS、tvOS和watchOS版本的Realm Swift和Realm Objective-C的源代码。
为什么使用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 { bytes in
SecRandomCopyBytes(kSecRandomDefault, 64, bytes)
}
// 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。
有关更多信息,请参阅我们文档中的详细说明。
对通过包含云后端和同步的模板应用程序免费开始感兴趣?请创建MongoDB Atlas账户。
文档
文档可以在docs.mongodb.com/realm/sdk/ios/找到。
API参考位于docs.mongodb.com/realm-sdks/swift/latest/
获取帮助
- 需要帮助来解决问题? 在Stack Overflow上查找带有
realm
标签的先前问题,或者提出新的问题。对于可能被认为是Stack Overflow范围太广的一般讨论,请使用社区论坛。 - 有bug要报告? 在GitHub上打开一个问题。如果可能,请包括Realm版本、完整日志、Realm文件以及显示问题的项目。
- 有功能请求? 在GitHub上打开一个问题。告诉我们该功能应该做什么以及您为什么想要这个功能。
构建Realm
如果您想使用预编译版本,也可以从源代码自行构建Realm。
预备条件
- 构建Realm需要Xcode 11.x或更高版本。
- 构建Realm文档需要jazzy
一旦您拥有所有必要的先决条件,构建Realm.framework只需要一个命令:sh build.sh build
。在第一次构建Realm时,您需要互联网连接来下载核心二进制文件。
运行sh build.sh help
以查看您可以执行的所有操作(构建ios/osx、生成文档、测试等)。
贡献
请参阅 CONTRIBUTING.md 了解更多详情!
行为准则
本项目遵守 MongoDB 行为准则。通过参与,您应遵守此准则。如遇到不可接受的行为,请向以下邮箱报告:[email protected]。
许可协议
Realm Objective-C 和 Realm Swift 采用 Apache 2.0 许可证发布。
Realm Core 也采用 Apache 2.0 许可证发布,可在 此处 获取。
反馈
如果您使用 Realm 并对其感到满意,请考虑发送推文 @realm 分享您的想法!
如果您不喜欢它,请告诉我们您希望改进的地方,这样我们可以修复它!