首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将app从SQLite.swift转换为GRDB.swift第二个问题

将app从SQLite.swift转换为GRDB.swift第二个问题
EN

Stack Overflow用户
提问于 2021-01-05 10:58:44
回答 1查看 119关注 0票数 0

我正在继续将我的一些应用程序从SQLite.sift转换到GRDB.swift。我将我的结构转换为添加Codable,FetchableRecord,这样它们就可以更好地与GRDB一起工作。这是在回复我关于这个主题的第一篇文章时提出的。

代码语言:javascript
复制
struct FigureList: Codable, FetchableRecord
{
    let figID: Int64
    var notes: String?
    var theDescription: String
    var obrienNum: String
    var manufNum: String?
    var catagory: String?
}

这是我正在寻找帮助来重做的代码片段,这样它就可以与GRDB一起工作了。我的应用程序使用这种类型的代码从数据库表构建数组。相当标准的流程。

代码语言:javascript
复制
static func getFigureList() -> [FigureList]
{
    var theArray = [FigureList]()
    let theTable = Table(gTheCollection)

    let figID = Expression<Int64>("FigureID")
    let notes = Expression<String>("Notes")
    let theDescription = Expression<String>("theDescription")
    let obrienNum = Expression<String>("ObrienNum")
    let manufNum = Expression<String>("ManufNum")
    let theCatagory = Expression<String>("Category")

    do {
        for figures in try Database.shared.databaseConnection!.prepare(theTable.order(obrienNum)) {

            theArray.append(FigureList(figID: figures[figID],
                                       notes: figures[notes],
                                       theDescription: figures[theDescription],
                                       obrienNum: figures[obrienNum],
                                       manufNum: figures[manufNum],
                                       catagory: figures[theCatagory]))
        }
    } catch {
        print("Fetching figure list failed: \(error)")
    }
    return theArray
}

这就是我到目前为止想出的。它不会产生任何警告或错误,但我很确定它不是完全正确的。再次,提前感谢您的帮助。

代码语言:javascript
复制
static func getFigList() -> [FigureList]
{
    var theArray = [FigureList]()
    let theTable = gTheCollection
    
    let figID = Column("FigureID")
    let notes = Column("Notes")
    let theDescription = Column("theDescription")
    let obrienNum = Column("ObrienNum")
    let manufNum = Column("ManufNum")
    let theCatagory = Column("Category")
    
    do {
        try Database.shared.databaseConnection!.read { db in
            let figures = try Row.fetchOne(db, sql: "SELECT * FROM = ? ORDER BY ObrienNum", arguments: [theTable])
            
            theArray.append(FigureList.init(figID: figures![figID],
                                            notes: figures![notes],
                                            theDescription: figures![theDescription],
                                            obrienNum: figures![obrienNum],
                                            manufNum: figures![manufNum],
                                            catagory: figures![theCatagory]))
        }
    } catch {
        print("Fetching figure list failed: \(error)")
    }
    
    return theArray
}
EN

回答 1

Stack Overflow用户

发布于 2021-01-06 17:55:17

我将我的结构转换为Codable,FetchableRecord,这样它们就可以更好地与

一起工作。

好的。现在很简单了:

代码语言:javascript
复制
static func getFigList() throws -> [FigureList] {
    return try Database.shared.databaseConnection!.read { db in
        // SELECT * FROM FigureList ORDER BY ObrienNum
        return FigureList.order(Column("ObrienNum")).fetchAll(db)
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65572639

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档