如何将Sqlite.swift的Binding转换为Swift原始类型?
解决Sqlite.swift中Binding转Swift原始类型的问题
你遇到的错误是因为row[0]返回的是any Binding?类型,无法直接强制转换为Int64。可以通过以下几种方式解决:
方法1:使用get方法安全获取值
Sqlite.swift的Row提供了get方法来处理类型转换,你可以指定要转换的类型:
for row in try db.prepare("select * from table") { // 确定列类型为Int64时直接获取 let t = try row.get(0) as Int64 // 或者用可选绑定避免转换失败崩溃 if let t = try row.get(0) as? Int64 { // 在这里使用t } }
方法2:使用类型安全的表结构定义(推荐)
Sqlite.swift的核心优势是类型安全,先定义表和列的表达式,就能直接获取对应类型的值,避免下标操作和类型转换问题:
// 先定义表和对应列 let targetTable = Table("table") let targetColumn = Expression<Int64>("column_name") // 替换为你的实际列名 // 查询并直接获取强类型值 for row in try db.prepare(targetTable) { let t = row[targetColumn] // 直接得到Int64类型 }
方法3:直接使用可选类型转换
如果不想用get方法,也可以用可选类型转换替代强制转换,解决编译错误:
for row in try db.prepare("select * from table") { if let t = row[0] as? Int64 { // 使用t } }
内容的提问来源于stack exchange,提问作者egor10_4
相关产品推荐
相关产品推荐

