我正在研究一个同时使用swift a objective c的项目。我之前的团队成员已经在目标C中编写了这段代码,我对此并不熟悉。存在的问题是,涉及从Sqlite存储和检索值的大部分部分都在obj C中。这已在公共类中完成以避免代码兑换。但是,如果我使用swift通过该obj C文件检索值,则会出现问题。如果该指定行中没有值,则返回“null”。
即使我在转换为'as?之前直接检查nil? String'相同的错误仍然存在。我开始知道swift中没有等效的“null”。在swift中,值是否为空(null)?
答案 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不为零时才会执行业务逻辑。