Swift:为值不为null的列值获取null

Swift:为值不为null的列值获取null,swift,sqlite,Swift,Sqlite,我正在对库运行一个简单的查询,从表中选择id和start\u time,其中start\u time列的值大于零 let query = table.where(self.columns.start_time > 0).select(self.columns.id, self.columns.start_time) for i in try db.prepare(query) { print(i) let id = try i.get(self.columns.id)

我正在对库运行一个简单的查询,从表中选择
id
start\u time
,其中
start\u time
列的值大于零

let query = table.where(self.columns.start_time > 0).select(self.columns.id, self.columns.start_time)
for i in try db.prepare(query) {
    print(i)
    let id = try i.get(self.columns.id)
    let start_time = try i.get(self.columns.start_time) // This throws error
}
其中,
self.columns
是此类的一个实例:

 private class Columns {
   let id = Expression<Int>("id")
   let start_time = Expression<Double>("start_time")
}

显然,该值不是空值。那么这里发生了什么呢?

我刚才也遇到了同样的问题,并得到了你的答案。深入到源代码中,我发现它基本上与您请求的数据类型有关。此处抛出错误:

public func get<V: Value>(_ column: Expression<V>) throws -> V {
    if let value = try get(Expression<V?>(column)) {
        return value
    } else {
        throw QueryError.unexpectedNullValue(name: column.template)
    }
}
public func get(uu列:表达式)抛出->V{
如果let value=try get(表达式(列)){
返回值
}否则{
抛出QueryError.unexpectedNullValue(名称:column.template)
}
}
因此,基本上您需要请求正确类型的数据,它不会自动为您铸造。在您的情况下,这将是
Int
而不是
Double

public func get<V: Value>(_ column: Expression<V>) throws -> V {
    if let value = try get(Expression<V?>(column)) {
        return value
    } else {
        throw QueryError.unexpectedNullValue(name: column.template)
    }
}