Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Swift进行查询并将结果添加到结构中_Swift_Sqlite - Fatal编程技术网

使用Swift进行查询并将结果添加到结构中

使用Swift进行查询并将结果添加到结构中,swift,sqlite,Swift,Sqlite,基于针对Swift()的SQLite教程,我能够成功地执行如下查询(使用原始查询): 但是,如果我将查询的样式更改为: do { let query = myTable.select(value1, value2, value3, value4).where(identifier == 0) guard let queryResults = try? db.prepare(query) else { print("ERROR") return }

基于针对Swift()的SQLite教程,我能够成功地执行如下查询(使用原始查询):

但是,如果我将查询的样式更改为:

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)")
}
我得到这个错误:

无法使用“Int”类型的索引为“Row”类型的值下标


有人能帮我吗?

从教程中可以看出

//This is from tutorial

let query = users.select(email)           // SELECT "email" FROM "users"
             .filter(name != nil)     // WHERE "name" IS NOT NULL
             .order(email.desc, name) // ORDER BY "email" DESC, "name"
             .limit(5, offset: 1)     // LIMIT 5 OFFSET 1
.select(item)
实际上就是查询本身。所以,无论什么时候

let query=myTable。选择(value1、value2、value3、value4)。其中(identifier==0)
则这是查询;您不需要为db准备任何东西。创建此库的人员已尝试使其更简单,而您只需执行
。选择(项)
,而无需创建语句并将其发送到数据库

使用上面的示例,您可以看到查询选择电子邮件,在那里它被过滤、排序和限制。因此,对于您来说,
query
就是您想要的
queryResult
——我不确定这会返回什么。。。您将在
db.prepare(query)
…hrm?上运行
query
的结果:这是正确的方法

do {
   let query = myTable.select(value1, value2, value3, value4).where(identifier == 0)
   guard let queryResults = try? db.prepare(query)
   else {
      print("ERROR")
      return
   }
   //option 1
   for row in queryResults {
      let data = myStruct(value1: try row.get(value1), value2: try row.get(value2), value3: try row.get(value3), value4: try row.get(value4))
      tableViewData.append(data)
   }
   //option 2  
   _ = queryResults.map { row in
       let data = myStruct(value1: try row.get(value1), value2: try row.get(value2), value3: try row.get(value3), value4: try row.get(value4))
       tableViewData.append(data)
   }
}
catch let ex {
   print("ReadDB error: \(ex)")
}

你能提供教程的链接吗?当然。。。
do {
   let query = myTable.select(value1, value2, value3, value4).where(identifier == 0)
   guard let queryResults = try? db.prepare(query)
   else {
      print("ERROR")
      return
   }
   //option 1
   for row in queryResults {
      let data = myStruct(value1: try row.get(value1), value2: try row.get(value2), value3: try row.get(value3), value4: try row.get(value4))
      tableViewData.append(data)
   }
   //option 2  
   _ = queryResults.map { row in
       let data = myStruct(value1: try row.get(value1), value2: try row.get(value2), value3: try row.get(value3), value4: try row.get(value4))
       tableViewData.append(data)
   }
}
catch let ex {
   print("ReadDB error: \(ex)")
}