在swift中检查空值(不是nil或NSnull)总是返回nil?

时间:2017-02-20 06:45:19

标签: ios objective-c swift string sqlite

我正在研究一个同时使用swift a objective c的项目。我之前的团队成员已经在目标C中编写了这段代码,我对此并不熟悉。存在的问题是,涉及从Sqlite存储和检索值的大部分部分都在obj C中。这已在公共类中完成以避免代码兑换。但是,如果我使用swift通过该obj C文件检索值,则会出现问题。如果该指定行中没有值,则返回“null”。enter image description here

更新:检查Antony Raphel所说的可选绑定 Same error persists.

即使我在转换为'as?之前直接检查nil? String'相同的错误仍然存​​在。我开始知道swift中没有等效的“null”。在swift中,值是否为空(null)?

4 个答案:

答案 0 :(得分:1)

只需更换

即可
var prevNotifCount = self.cmmn.getPreviousNotificationCount() as? String

并使用

  guard let prevNotifCount = self.cmmn.getPreviousNotificationCount()      else{
              print("No previous notification value") 
              return 
        }

无需检查nil,如果失败,则执行块

答案 1 :(得分:0)

if let prevNotifCount = self.cmmn.getPreviousNotificationCount() as? String
{
   self.cmmn.saveInDatabase("19", phoneNumber: "0", otp: "0")
   print(self.cmmn.getPreviousNotificationCount())
} 
else
{
    print("No previous notification value")
}

这是名为optional binding的标准Swift方法。您可以安全地打开一个可选项,如果它不是nil,则将其分配给局部变量

答案 2 :(得分:0)

尝试添加if if检查这样的nil条件: -

if let NotifCount = self.cmmn,getPreviousNotificationCount() as? String

{
    prevNotifCount = NotifCount
}

请试试这个,希望它有所帮助!

答案 3 :(得分:0)

如果是let语句,请使用。

level=info msg="Starting prometheus (version=1.5.2, branch=master, revision=bd1182d29f462c39544f94cc822830e1c64cf55b)" source="main.go:75"
level=info msg="Build context (go=go1.7.5, user=root@1a01c5f68840, date=20170220-07:00:00)" source="main.go:76"
level=info msg="Loading configuration file /etc/prometheus/prometheus.yml" source="main.go:248"
level=error msg="Error opening memory series storage: leveldb: manifest corrupted (field 'comparer'): missing [file=MANIFEST-000009]" source="main.go:182"

现在只有在preNotifCount不为零时才会执行业务逻辑。