Based on SQLite tutorial for Swift (Link), I am able to perform a query successfully as follows (with a raw query):
struct myStruct {
var value1 = String()
var value2 = String()
var value3 = String()
var value4 = String()
}
do {
guard let queryResults = try? db.prepare("SELECT value1, value2, value3, value4 FROM table WHERE identifier = 0")
else {
print("ERROR")
return
}
//first way to get data (works)
for row in queryResults {
let data = myStruct(value1: row[0] as! String, value2: row[1] as! String, value3: "", eventDate: row[2] as! String, value4: row[3] as! String)
tableViewData.append(data)
}
//second way to get data into struct
_ = queryResults.map { row in
let data = myStruct(value1: row[0]! as! String, value2: row[1] as! String, value3: "", eventDate: row[2] as! String, value4: row[3] as! String)
tableViewData.append(data)
}
}
catch let ex {
print("ReadDB error: \(ex)")
}
But, if I change the style of the query as follows:
do {
let query = myTable.select(value1, value2, value3, value4).where(identifier == 0)
guard let queryResults = try? db.prepare(query)
else {
print("ERROR")
return
}
//does not work
for row in queryResults {
let data = myStruct(value1: row[0] as! String, value2: row[1] as! String, value3: "", eventDate: row[2] as! String, value4: row[3] as! String)
tableViewData.append(data)
}
//neither working
_ = queryResults.map { row in
let data = myStruct(value1: row[0]! as! String, value2: row[1] as! String, value3: "", eventDate: row[2] as! String, value4: row[3] as! String)
tableViewData.append(data)
}
}
catch let ex {
print("ReadDB error: \(ex)")
}
I get this error:
Cannot subscript a value of type 'Row' with an index of type 'Int'
Can anyone help me with this?