我有一个字典,有不同的数据类型值从该字典我创建数据库的插入查询现在我的问题是如果我传递double值,那么它也进入int条件,如果我写入条件up和Int条件下降。我也尝试与isKind(of :)但同样的事情发生。不能differenciat double和int从NSDictionary
这里是我的代码以为关键字
//MARK: INSERT RECORDS
func insertRecord(_ dictRecord : NSDictionary, tableName : String)->Bool
{
//Example:- INSERT INTO subject(sub_color,sub_name,sub_priority)values(125.562000,'Maths','15')
let strStart = "INSERT INTO " + tableName
var column : String = "("
var values : String = "("
var i = 0
for key in dictRecord.allKeys
{
column = (column as String) + (key as! String) + ((dictRecord.allKeys.count-1 == i) ? "" : ",")
// column = "\(column) \(key) \(condition)" as NSString
if let strValue = dictRecord.value(forKey: (key as! String)) as? String
{
values = (values as String) + "\"" + strValue + "\"" + ((dictRecord.allKeys.count-1 == i) ? "" : ",")
// values = "\(values)'\(strValue)' \(condition) " as NSString
}else if let doubleValue = dictRecord.value(forKey: (key as! String)) as? Double
{
values = (values as String) + String (format: "%f",doubleValue) + ((dictRecord.allKeys.count-1 == i) ? "" : ",")
// let strDoubleValue = String(format: "%f", doubleValue)
// values = "\(values) \(strDoubleValue) \(condition) " as NSString
}else if let numValue = dictRecord.value(forKey: (key as! String)) as? Int
{
values = (values as String) + String (format: "%d",numValue) + ((dictRecord.allKeys.count-1 == i) ? "" : ",")
// let strNumValue = String(format: "%d", numValue)
// values = "\(values) \(strNumValue) \(condition) " as NSString
}
i = i + 1
}
// column = (column as String) + ")"
// values = (values as String) + ")"
column = "\(column))"
values = "\(values))"
let strQuery = String(format:"%@%@values%@",strStart,column,values)
return self.executeQuery(strQuery)
}
我与代码为代码
func insertRecord(_ dictRecord : NSDictionary, tableName : String)->Bool
{
//Example:- INSERT INTO subject(sub_color,sub_name,sub_priority)values(125.562000,'Maths','15')
let strStart = "INSERT INTO " + tableName
var column : String = "("
var values : String = "("
var i = 0
for key in dictRecord.allKeys
{
column = (column as String) + (key as! String) + ((dictRecord.allKeys.count-1 == i) ? "" : ",")
// column = "\(column) \(key) \(condition)" as NSString
if let strValue = dictRecord.value(forKey: (key as! String)) as? String
{
values = (values as String) + "\"" + strValue + "\"" + ((dictRecord.allKeys.count-1 == i) ? "" : ",")
// values = "\(values)'\(strValue)' \(condition) " as NSString
}else if dictRecord.value(forKey: (key as! String)) is Int
{
let numValue = dictRecord.value(forKey: (key as! String)) as? Int
values = (values as String) + String (format: "%d",numValue!) + ((dictRecord.allKeys.count-1 == i) ? "" : ",")
// let strNumValue = String(format: "%d", numValue)
// values = "\(values) \(strNumValue) \(condition) " as NSString
}else if dictRecord.value(forKey: (key as! String)) is Double
{
let doubleValue = dictRecord.value(forKey: (key as! String)) as? Double
values = (values as String) + String (format: "%f",doubleValue!) + ((dictRecord.allKeys.count-1 == i) ? "" : ",")
// let strDoubleValue = String(format: "%f", doubleValue)
// values = "\(values) \(strDoubleValue) \(condition) " as NSString
}else if dictRecord.value(forKey: (key as! String)) is Float
{
let floatValue = dictRecord.value(forKey: (key as! String)) as? Float
values = (values as String) + String (format: "%f",floatValue!) + ((dictRecord.allKeys.count-1 == i) ? "" : ",")
// let strDoubleValue = String(format: "%f", doubleValue)
// values = "\(values) \(strDoubleValue) \(condition) " as NSString
}
i = i + 1
}
// column = (column as String) + ")"
column = "\(column))"
values = "\(values))"
let strQuery = String(format:"%@%@values%@",strStart,column,values)
return self.executeQuery(strQuery)
}
我尝试存储
{
"country_Lat" = "112.00";
"country_Long" = 112122.000; // if always store in database like 112122
"country_Name" = London;
"country_Status" = 1;
"country_id" = 2;
createddate = "12:00";
updateddate = "1:00";
}
如果你想过一个快乐的生活作为一个Swift编码器,现在停止使用NSDictionary,并使用Swift词典。它们是打字和安全的。一个人不应该像'.value(forKey:(key as!String))那样做?双'在斯威夫特。只需在正确类型的Swift数组或字典上使用下标。 – Moritz
可能相关:[是否有正确的方法来确定NSNumber是从使用Swift的Bool派生的?](http://stackoverflow.com/questions/30215680/is-there-a-correct-way-to-determine - 即-AN-的NSNumber-IS-派生从-A-布尔-全光照)。 –
@EricAya我试着用你的建议,但结果相同 –