Я вызываю функцию для выполнения оператора select в связанной базе данных 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 строки.
Может кто-нибудь сказать мне, что я делаю неправильно? Я не знаю, как получить доступ к данным. Спасибо.