【问题标题】:SwiftUI - Return values from array of structs are all in one rowSwiftUI - 结构数组的返回值都在一行中
【发布时间】:2020-03-20 15:07:30
【问题描述】:

我正在调用一个函数,以便在捆绑的 SQLite 数据库中执行选择语句。该函数返回一个结构数组。数据库被正确读取,因为我在代码中放置了一些打印命令。然而最终的数组只有 1 行,其中包含所有数据,而不是 16 行结构。

databaseHelper.swift 中的结构体代码是...

struct ButtonData: Hashable {
    let english: String
    let categoryID: Int
    let indonesian: String
}

databaseHelper中的数据库代码是

class DatabaseHelper {

    var buttonVars = [ButtonData]()

    var database: Connection!

    let buttonsTable = Table("Button")
    let english = Expression<String>("english")
    let category = Expression<String>("category")
    let categoryID = Expression<Int>("ID")
    let filename = Expression<String>("filename")
    let indonesian = Expression<String>("indonesian")

    init() {

        do {
            let path = Bundle.main.path(forResource: "sga", ofType: "db")!
            let database = try Connection(path, readonly: true)
            self.database = database
            print("Database initialized at path \(path)")
        } catch {
            print("error")
        }
    }


    func queryDatabase(passedCategory: String) -> [ButtonData] {

        do {
            let buttons = try self.database.prepare(self.buttonsTable.filter(self.category==passedCategory))
            for row in buttons {
                print("English: \(row[self.english]), ID: \(row[self.categoryID]), Indonesian: \(row[self.indonesian])")
            //    buttonVars.append(ButtonData(english: row[english], categoryID: row[categoryID], indonesian: row[indonesian]))
                buttonVars.append(ButtonData(english: row[english], categoryID: row[categoryID], indonesian: row[indonesian]))
            }
        } catch {
            print(error)
        }
        print(buttonVars[0])
        print(buttonVars[1])
        print(buttonVars[2])
        print(buttonVars[3])
        print(buttonVars[4])
        print(buttonVars[5])
        print(buttonVars[6])
        print(buttonVars[7])
        print(buttonVars[8])
        print(buttonVars[9])
        print(buttonVars[10])
        print(buttonVars[11])
        print(buttonVars[12])
        print(buttonVars[13])
        print(buttonVars[14])
        print(buttonVars[15])
        return buttonVars
    }
}

函数代码,在SoundPageView.swift中(这个页面调用数据库函数),是……

    func getArrayValues() {
        let buttonRows = [DatabaseHelper().queryDatabase(passedCategory: category)]
        let btnCount: Int = buttonRows.count
        print(btnCount)
        print(buttonRows[0])
    }

控制台中的打印值显示 btnCount = 1 但在返回数组之前,它由 16 行组成。只有返回后才减少到1行。

谁能告诉我我做错了什么?我不知道如何访问数据。谢谢。

【问题讨论】:

    标签: arrays swift sqlite struct swiftui


    【解决方案1】:

    我不知道你为什么要在这个调用中加上括号:

    let buttonRows = [DatabaseHelper().queryDatabase(passedCategory: category)]
    

    func queryDatabase 自己返回一个数组。我觉得应该是这样的:

    let buttonRows = DatabaseHelper().queryDatabase(passedCategory: category)
    

    否则,您的结果将是一个包含一个条目的数组,这是调用 queryDatabase 的结果。

    【讨论】:

    • 是的,你又救了我哈尔!再次感谢!
    猜你喜欢
    • 1970-01-01
    • 2018-03-12
    • 1970-01-01
    • 1970-01-01
    • 2022-10-20
    • 1970-01-01
    • 2014-06-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多