Realm() 究竟是如何工作的?

4

我最近在用 Realm 开发一个 Swift 3 的 iOS App,总体来说,相比 CoreData,使用起来更加舒适。

不过,文档似乎不够详细,无法帮助我找到我想要的...

let realm = try! Realm()

...做什么,以及是否有必要(甚至是强制性的)使用多个版本的此行代码,还是一个单一的调用足以覆盖整个应用程序。

因此,如果任何对Realm有深入了解的人可以帮助,我将不胜感激。

我的问题按重要性顺序如下:

  1. 上面的代码行到底是做什么的?它是否打开了某种文件管理器流,然后允许我的应用程序在运行时写入和读取Realm数据文件?

  2. 还是说我需要在每次Realm读/写操作之前都使用这行代码?或者是介于两者之间的某种情况,例如需要在每个独立的类/视图控制器中调用它,但不需要在每个读/写操作之前调用它?

  3. 为什么Realm在其所有方法中都使用try!?那只是为了在各种教程和示例源文件中演示简化目的吗?或者我们实际上在使用Realm时应该抑制这样的错误?

如果Realm文档和示例文件没有提供这些问题的答案,我将非常感激任何和所有的意见,除非我眼瞎了,否则请指出相关的文档/参考页面。

2个回答

0

基于我的知识,可能不是完全正确:

  1. 这行代码将创建一个 Realm 实例来控制当前线程中的 realm 读写,在这种情况下,您正在使用默认配置调用 Realm,如果您需要其他配置(如数据库名称、路径等),则可以修改配置。
  2. 只要您在当前类中创建了它或者使用了默认的 Realm(),就不需要它,这意味着您仍然需要它,但可以将其设置为类变量或其他内容。
  3. try 表示它可能会抛出错误,如果您想处理错误,可以使用 docatch 来处理。而使用 try! 则表示您跳过了错误。

0

感谢使用 Realm!我们会努力让文档更加清晰易懂。在此期间:

  1. 这行代码会给你一个 Realm 实例,realm。特别地,Realm() 会给你 默认的 Realm,它只是使用默认配置对象指定的 Realm 配置。 (如果您的应用程序只有一个 Realm,则可以使用此 API 获取对其的引用,而无需显式传递配置结构。)您可以像使用任何其他 Swift 对象一样在此实例上调用 API,或将其传递到需要 Realm 参数的其他 API 中。
  2. 像普通对象一样使用 realm 实例,不必担心流或任何其他隐藏状态。唯一的限制是不应该在线程或队列之间传递 Realm 实例。
  3. 我们文档中的 try! 主要是为了简洁明了。生产应用程序是否需要避免使用 try! 取决于是否可以合理地期望从打开 Realm 的失败尝试中恢复,并且是否需要在 Realm 打开失败时发生特殊行为。您可以在 这里 查看可能的错误。
最后一点说明:在Swift中,Realm(即磁盘数据库)和Realm类的实例之间有一个重要的区别。如果它们是使用相同的配置值创建的,则多个Realm实例可以引用相同的底层Realm数据库。例如,您可能在应用程序的不同部分或不同线程中拥有多个Realm实例(以遵守上述同一线程要求)。我们的一些用户选择创建一个“管理器”单例对象,在启动时打开特定的Realm,处理可能发生的任何错误,并将Realm实例提供给可能需要从数据库读取或写入的UI代码。当然,这种模式是否适合您取决于您的编码风格和应用程序的具体需求。

希望这能帮到您!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接