使用 iOS 将 SQLite 数据库连接存储在哪里?

Where to store a SQLite DB connection with iOS?

我使用 SQLite.swift 创建了一个 SQLite 连接,但我不确定将数据库连接存储在何处,以便我可以在用户打开各种视图的应用程序期间使用它。

这里使用 UserDefaults 合适吗?或者 EnvironmentObject?

iOS 应用在保持数据库连接打开以供重用方面有何建议?

Is using UserDefaults here an appropriate case?

绝对不是。就像您自己说的:您希望它在应用程序打开时存在。 UserDefaults 用于当应用程序不是 运行.

时要存储的内容

Or EnvironmentObject?

可以 ,但从语义上讲它仍然是错误的:Apple 将其定义为“由父视图或祖先视图提供的可观察对象的 属性 包装类型。” ,这并不真正适合数据库连接。它不是具有状态的可观察对象。

理想情况下,您退后一步,查看应用程序的更通用架构。

  • 视图需要特定格式的数据。他们不关心数据来自哪里。
  • 数据来自数据库这一事实是实现细节 - 明天您可能决定从远程服务器检索它,并且您不想更改每个视图正因为如此。

所以你真正想要的是

  • View 与某种“数据提供者”接口 对话,它定义了一个接口,无论数据存储在何处,视图都可以通过该接口获取数据。
  • 您对“数据提供者”的实现是与本地数据库对话(目前,但它可以根据您的需要进行更改)。

在此结构中,数据库连接由数据提供者管理,不需要与任何人共享。你的视图实际上将使用 Observable 对象,除了那些可观察对象是数据本身,而不是与数据库的连接(事实上,视图不会“知道”数据来自哪里)。

我不会详细介绍如何实现该模型 - 这里还有许多其他细节(例如您的应用程序的整体架构),但这是想法的要点。