【问题标题】:Insert a potentially null value into the sqlite database in iOS在 iOS 的 sqlite 数据库中插入一个可能为空的值
【发布时间】:2015-12-01 13:24:32
【问题描述】:

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

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

 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?

谢谢!

【问题讨论】:

    标签: ios swift sqlite swift2 fmdb


    【解决方案1】:

    所以这最终对我有用,尽管这似乎有点令人讨厌:

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

    【讨论】:

    • 这有点短:content.URL ?? NSNull()
    【解决方案2】:

    我用于此类情况的一种方法是创建类扩展。

    例如:

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

    然后你可以使用:

    NSObject.databaseSafeObject(content.URL);
    

    得到可以直接插入数据库的东西。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        在处理IntDouble 类型的变量时,AnyObject 类型对我不起作用,因此我创建了一个类似的函数来处理可选的 Swift 变量。

        private func getOptionalOrNull(_ possibleValue:Any?)->Any {
          if let theValue = possibleValue {
            return theValue
          } else {
            return NSNull()
          }
        } 
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-09-09
          • 1970-01-01
          • 1970-01-01
          • 2016-11-04
          • 2023-04-03
          • 2017-04-03
          • 1970-01-01
          • 2013-04-17
          相关资源
          最近更新 更多