我有一个名为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?
谢谢!
我在这种情况下使用的一种方法是创建类扩展。
例如:
class func databaseSafeObject(object: AnyObject?) -> AnyObject {
if let safeObject: AnyObject = object{
return safeObject;
}
return NSNull();
}
然后您可以使用:
NSObject.databaseSafeObject(content.URL);
获得可以直接插入数据库的内容。
所以这最终对我有用,尽管这似乎是必不可少的:
(content.URL == nil ? NSNull() : content.URL!)
[存在用于SQLite的Swift包装器,它可能比fmdb更适合,后者可以在Swift中运行,但不使用Swift功能,例如可选功能(在此处可能会错过),类型安全性和错误处理。例如,请参阅我的GRDB.swift http://github.com/groue/GRDB.swift,该文件受ccgus / fmdb的影响很大。
AnyObject
类型不适用于Int
和Double
类型的变量,因此我创建了一个类似的函数来处理可选的Swift变量。
private func getOptionalOrNull(_ possibleValue:Any?)->Any {
if let theValue = possibleValue {
return theValue
} else {
return NSNull()
}
}