【问题标题】:I am getting a warning comparing my OPTIONAL value to not-nil will always return true我收到一个警告,将我的 OPTIONAL 值与 not-nil 进行比较将始终返回 true
【发布时间】:2018-05-24 23:18:43
【问题描述】:

我已将名为“JournalEntry”的类型声明为可选类型并将其设置为 nil。然后,当 VC 加载时,我测试以确保在尝试使用对象之前已注入该对象,但我收到一条错误消息,提示“将 'JournalEntry' 类型的非可选值与 nil 进行比较总是返回 true”。

但我将它设置为可选并且为零...

代码如下:

class AddJournalEntryVC: UIViewController, UITextViewDelegate {

    var willEdit:Bool?
    var entryForEdit:JournalEntry? = nil

    override func viewDidLoad() {
        super.viewDidLoad()


        if isEditing {
            guard let entry = entryForEdit, entry != nil else{ //Comparing non-optional value of type 'JournalEntry' to nil always returns true
                return
            }
            dateLabel.text = entry.dateString!
            timeLabel.text = entry.timeString!
            timestamp = entry.timestamp!
        }
    }

我的想法哪里出错了?谢谢。

【问题讨论】:

  • 你刚刚解开了可选的。该值不能为零。它不再是可选的了。删除, entry != nil,你会没事的。
  • 那么简单地执行 'guard let entry = entryForEdit else {}' 将确保 entry 不为零?
  • 'guard let entry = entryForEdit else {}' 正在询问“嘿 Swift,请检查 entryForEdit,如果你得到非 nil 的东西,请创建一个名为 entry 的常量。否则,做这些事情在 else 语句中。
  • @CodyLucas 是的,绝对是。使用guard let entry = entryForEdit else 展开将保证entryguard 之后使用时不为零。
  • 就像if let 将可选项解包到其内部范围一样,guard let 将其解包到封闭范围。因此,如果守卫检查通过,则 entry 被解包,不再是可选的,并且保证不会为 nil。如果它是 nil,你将输入守卫的 else 子句。

标签: ios swift optional


【解决方案1】:

只需删除entry != nil 子句,它就会按您的需要工作。继续执行的if let 语句已经执行了非零检查。

guard let entry = entryForEdit else {
    return
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    • 2017-07-06
    • 1970-01-01
    • 2015-06-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多