【问题标题】:Checking for null value (not nil or NSnull) in swift always return nil? [duplicate]在swift中检查空值(不是nil或NSnull)总是返回nil? [复制]
【发布时间】:2017-07-09 08:22:19
【问题描述】:

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

更新:检查了 Antony Raphel 所说的可选绑定

即使我在转换为 'as? String' 同样的错误仍然存​​在。我开始知道 swift 中没有“null”的等价物。 swift中的值是否为空(null)?

【问题讨论】:

  • 你可以直接检查“你的字符串”==“”

标签: ios objective-c swift string sqlite


【解决方案1】:

只需更换你的

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

并使用

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

不需要检查nil,如果失败则执行else块

【讨论】:

  • 这解决了我的问题。转换为 as?字符串总是返回 null .. 我已将您的帖子编辑为解决我的问题的代码
【解决方案2】:
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")
}

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

【讨论】:

    【解决方案3】:

    尝试通过添加 if let 来检查 nil 条件,如下所示:-

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

    请试试这个,希望对你有帮助!

    【讨论】:

      【解决方案4】:

      使用 if let 语句。

      if let preNotifCount = self.cmmn.getPreviousNotofication {
            //business logic
      }
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-02-10
        • 2015-12-28
        • 2016-12-07
        • 2019-05-31
        • 1970-01-01
        • 1970-01-01
        • 2017-03-28
        • 2015-03-05
        相关资源
        最近更新 更多