返回

SwiftUI 中使用 SQLite 数据库:2020 年指南

见解分享

在当今快速发展的技术领域,管理数据已成为应用程序开发至关重要的一环。在移动应用程序开发中,SQLite 已成为存储和管理结构化数据的首选解决方案。它的轻量级、跨平台兼容性和高效性使其成为 iOS 和其他移动平台的理想选择。

本教程将带你踏上使用 SwiftUI 和 SQLite 在 iOS 应用中创建和管理数据库的旅程。我们将逐步介绍创建数据库、管理表和执行查询的基本步骤。

先决条件:

  • Xcode 11 或更高版本
  • Swift 5 或更高版本

创建 Xcode 项目:

  1. 打开 Xcode 并创建一个新的 SwiftUI 项目。
  2. 为项目命名,然后选择“Single View App”。

第一步是将 SQLite 库集成到项目中。我们将使用 SQLite.swift,这是一个轻量级的 Swift 包装器,可简化与 SQLite 的交互。

  1. 在终端中运行以下命令:
swift package install --save SQLite
  1. 打开 Xcode 中的 Package.swift 文件,然后添加以下行:
import SQLite

有了必要的集成之后,我们就可以开始创建数据库了。

  1. 在项目中创建一个名为 DatabaseManager.swift 的新文件。
  2. 在文件中,添加以下代码:
import SQLite

class DatabaseManager {
    static let shared = DatabaseManager()
    let db: Connection?

    init() {
        let path = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first!
        do {
            db = try Connection("\(path)/landmark.db")
        } catch {
            db = nil
            print("Unable to open database")
        }
    }
}

这段代码创建了一个单例类 DatabaseManager,它负责管理与数据库的连接。

接下来,我们需要创建表来存储我们的数据。

  1. DatabaseManager.swift 文件中,添加以下代码:
func createTable() {
    do {
        try db?.run(landmarks.create { t in
            t.column(id, primaryKey: true)
            t.column(name)
            t.column(description)
            t.column(latitude)
            t.column(longitude)
        })
    } catch {
        print("Unable to create table: \(error)")
    }
}

这段代码创建了一个名为 landmarks 的表,它具有五个列:id(主键)、namedescriptionlatitudelongitude

现在,我们可以向表中插入数据。

  1. DatabaseManager.swift 文件中,添加以下代码:
func insertData() {
    do {
        let insert = landmarks.insert(name <- "Taj Mahal", description <- "An ivory-white marble mausoleum on the south bank of the Yamuna river in the Indian city of Agra.", latitude <- 27.175277, longitude <- 78.042128)
        try db?.run(insert)
        print("Data inserted successfully")
    } catch {
        print("Unable to insert data: \(error)")
    }
}

这段代码向 landmarks 表中插入一行数据,创建了泰姬陵的地标。

最后,我们需要查询数据。

  1. DatabaseManager.swift 文件中,添加以下代码:
func queryData() {
    do {
        for landmark in try db!.prepare(landmarks) {
            print("Name: \(landmark[name]), Description: \(landmark[description]), Latitude: \(landmark[latitude]), Longitude: \(landmark[longitude])")
        }
    } catch {
        print("Unable to query data: \(error)")
    }
}

这段代码从 landmarks 表中查询所有行,并打印出每一行的值。

现在,我们已经设置好数据库,可以将其集成到 SwiftUI 应用程序中。

  1. ContentView.swift 文件中,添加以下代码:
struct ContentView: View {
    @State private var landmarks = [Landmark]()

    var body: some View {
        List(landmarks) { landmark in
            Text("\(landmark.name)")
        }
        .onAppear {
            DatabaseManager.shared.createTable()
            DatabaseManager.shared.insertData()
            DatabaseManager.shared.queryData()
        }
    }
}

这段代码创建了一个 ContentView,它显示一个列表,其中包含 landmarks 数组中的地标。当视图出现时,它调用 DatabaseManager 中的方法来创建表、插入数据并查询数据。

恭喜!你已经成功地使用 SwiftUI 和 SQLite 在 iOS 应用程序中创建和管理了数据库。现在,你可以利用 SQLite 的强大功能,为你的应用程序构建强大的数据管理解决方案。