我从swift中的sqlite表中得到了错误的值
我从sqlite表中得到了错误的值。这是我的密码 代码:我从swift中的sqlite表中得到了错误的值,swift,sqlite,Swift,Sqlite,我从sqlite表中得到了错误的值。这是我的密码 代码: var arrtribute_Mast_List : NSMutableArray = [] var querySQL = String(format:"SELECT * FROM %@ ORDER BY %@", TABLE_ATTRIBUTE_MASTER, ATTRIBUTE_MASTER_ATTR_ID) var statement:COpaquePointer = nil //querySQL =
var arrtribute_Mast_List : NSMutableArray = []
var querySQL = String(format:"SELECT * FROM %@ ORDER BY %@", TABLE_ATTRIBUTE_MASTER, ATTRIBUTE_MASTER_ATTR_ID)
var statement:COpaquePointer = nil
//querySQL = querySQL.String(NSUTF8StringEncoding, allowLossyConversion: false)
if (sqlite3_prepare_v2(database, querySQL, -1, &statement, nil) == SQLITE_OK) {
while(sqlite3_step(statement) == SQLITE_ROW) {
let name = sqlite3_column_text(statement, 2)
let attributeName = String.fromCString(UnsafePointer<CChar>(name))
println("Attribute value = \(attributeName)")
}
sqlite3_finalize(statement);
}
需要输出:
Attribute value = "Shamitabh"
您得到的是
可选(“Shamitabh”)
,因为String.fromCString
不能保证成功。它可能会失败,attributeName
将为零。您可以通过使其成为隐式展开的可选项(如果String.fromCString
失败,则会崩溃)来解决此问题:
让attributeName=String.fromCString(UnsafePointer(name))!
。。或者,您可以在使用它之前正确地执行该操作并检查该值是否为零。例如,像这样:
if let attributeName = String.fromCString(UnsafePointer<CChar>(name)) {
println("Attribute value = \(attributeName)")
} else {
println("Couldn't get the attribute name")
}
如果让attributeName=String.fromCString(UnsafePointer(name)){
println(“属性值=\(attributeName)”)
}否则{
println(“无法获取属性名”)
}
您不能打开可选的包装吗?您的输出和您想要的输出基本相同,只是第一个是可选的。在我的表中,列值是“Shamitabh”。但是我得到了可选的(“Shamitabh”),你知道可选值是什么吗?展开可选值是什么?
let attributeName = String.fromCString(UnsafePointer<CChar>(name))!
if let attributeName = String.fromCString(UnsafePointer<CChar>(name)) {
println("Attribute value = \(attributeName)")
} else {
println("Couldn't get the attribute name")
}