Xcode 在SQLite.swift的过滤器中使用变量
我在XCode 6.3测试版的应用程序中使用了Xcode 在SQLite.swift的过滤器中使用变量,xcode,swift,sqlite.swift,Xcode,Swift,Sqlite.swift,我在XCode 6.3测试版的应用程序中使用了SQLite.swift(分支swift-1-2)。 我能够创建数据库/表并在表中插入条目 到目前为止还不错 现在我有一个简单的场景如下: class Foo { var id: Int? var name: String? /* constructor to create an instance ... */ } // This is how the table column is defined var id = Expres
SQLite.swift(分支swift-1-2)
。
我能够创建数据库/表并在表中插入条目
到目前为止还不错
现在我有一个简单的场景如下:
class Foo {
var id: Int?
var name: String?
/* constructor to create an instance ... */
}
// This is how the table column is defined
var id = Expression<Int64>("id")
// Function to update data in the table
func updateFoo(foo: Foo) -> Int? {
// 'foos' is the table name
let candidateFoo = foos.filter(super.id == foo.id!) //<----ERROR!!!
let (rowsUpdated, statement) = candidateFoo.update(name <- foo.name!)
if let rowsUpdated = rowsUpdated {
println("Succesfully updated \(rowsUpdated) row(s)")
return rowsUpdated
} else if statement.failed {
println("Update failed. Reason: \(statement.reason)")
}
return nil
}
但是,如果我只是这样做,它会再次失败,并出现相同的错误:
var i = 3
let candidateFoo = foos.filter(super.id == i) // <----ERROR!!!
现在我想知道是否必须更改我的类定义,这将需要在代码中的多个位置进行更改。还建议使用Int,除非需要显式大小
您应该使用单词大小的Int类型来存储整数值,除非
您需要具有特定大小或符号的类型
此外,SQLite.swift文档说明:
而Int64是基本的原始类型(用于在
32位平台),Int和Bool工作透明
因此,我是否应该在我的类定义中明确使用
Int64
,因为它映射到DB?您将Foo
结构直接映射到SQL中的底层类型,因此您应该在这两个位置使用相同的类型。如果在32位设备上需要64位精度(以避免溢出等),则应使用Int64
。如果您不担心,请使用Int
两个位置:
var id = Expression<Int>("id")
我认为这个答案可以帮助你我不相信这是个问题。我理解(我想!)id和id之间的区别代码>和
id=3
。见我的更新上面。即使我声明了一个本地var I=3
并在filter()
中使用它,我仍然会得到完全相同的错误。这澄清了我的混淆点!谢谢你的回答!
var i:Int64 = 3
let candidateFoo = foos.filter(super.id == i) // No Error!
var id = Expression<Int>("id")
let candidateFoo = foos.filter(super.id == Int64(foo.id!))