在iOS中的sqlite数据库中插入一个可能为null的值

时间:2015-09-05 14:17:33

标签: ios swift sqlite swift2 fmdb

我有一个名为Content的类,其URL属性可以为空(URL:String?)。 我想使用FMDB将此URL属性存储在我的sqlite数据库中,但是Xcode抱怨我需要打开可选的!

但问题是当我做content.URL!它崩溃了,因为它没有。

 success = db.executeUpdate("INSERT INTO CONTENT(ID, Icon, Title, Description, URL, IsActive) VALUES(?,?,?,?,?,?,?,?,?)", withArgumentsInArray: [content.ID, content.icon, content.title, content.description, content.URL!, content.isActive])

如何在有URL且没有值的情况下成功插入URL?

谢谢!

4 个答案:

答案 0 :(得分:0)

所以这最终为我工作,虽然看起来有点喜欢这是它必须如何:

(content.URL == nil ? NSNull() : content.URL!)

答案 1 :(得分:0)

我在这种情况下使用的一种方法是创建一个类扩展。

例如:

with data as (
    select Code, substring(Code, 1, len(Code) - 1) as Prefix, Name, Total from T
)
select
    case when grouping(Name) = 1 then Prefix else min(Code) end as Code,
    case when grouping(Name) = 1 then '-' else Name end as Name,
    sum(Total) as Total
from data
group by grouping sets ( (Prefix, Name), (Prefix) )
order by Prefix, grouping(Name), Code

然后你可以使用:

 class func databaseSafeObject(object: AnyObject?) -> AnyObject {
    if let safeObject: AnyObject = object{
        return safeObject;
    }

    return NSNull();
}

获取可直接插入数据库的内容。

答案 2 :(得分:0)

对于SQLite存在Swift包装器可能更适合fmdb,它可以在Swift中运行但不使用Swift功能,例如选项(你在这里错过),类型安全和错误处理。例如,参见我的GRDB.swift http://github.com/groue/GRDB.swift,它受ccgus / fmdb的影响很大。

答案 3 :(得分:0)

在使用mydf %>% transmute(item, pos = map(pos, ~ .x[,1] %>% tibble(start_pos = .))) %>% unnest(c(pos)) AnyObject类型的变量时,Int类型对我不起作用,因此我创建了一个类似的函数来处理可选的Swift变量。

Double