ios - 条件绑定(bind)的初始化程序必须具有可选类型

标签 ios swift carekit

我不明白为什么会出现此错误。我看不出代码有什么问题。请帮忙!!谢谢!

      guard reason == .completed else { return }
 ***guard let symptomTrackerViewController = symptomTrackerViewController***,
let event = symptomTrackerViewController.lastSelectedAssessmentEvent else { return }


let carePlanResult=carePlanStoreManager.buildCarePlanResultFrom(taskResult: taskViewController.result)

   carePlanStoreManager.store.update(event, with: carePlanResult, state: .completed) {
        success, _, error in
        if !success {
            print(error?.localizedDescription)
        }
    }
}

最佳答案

语法

if let someVal = someVal {
  //Inside the braces someVal is unwrapped
}

当等号两边的变量名相同时有效。

但是,代码

guard let someVal = someVal else {
  return
}

不合法。我相信第一种形式 if let 条件绑定(bind)允许您使用相同名称解包可选的原因是重新分配仅在大括号创建的内部范围内有效if 语句。

相比之下,guard 语句不会在可选解包成功时将执行的代码放在大括号中。 someVar 的新定义没有有效的内部范围。

第二部分听起来您的 symptomTrackerViewController 不是可选的。如果 symptomTrackerViewController 不是可选的,那么任何尝试解包它的代码(if letguard let 和使用 ?!) 将失败。

关于ios - 条件绑定(bind)的初始化程序必须具有可选类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41047388/

相关文章:

ios - 我可以通过滚动更改 iOS8 中状态栏的颜色吗?

ios - UISplitViewController 和取消选择单元格

swift - iOS 14 : App freezes without crash report on updating constraint constant

Swift: '? :' 表达式中的结果值具有不匹配的类型 'Class' 和 '()'

ios - 如何更改 CareKit 图表中的笔画宽度?

ios - 当应用程序进入后台或模拟器锁定时,UILocalNotification 不起作用

ios - 在swift中将值输出到typedef指针

ios - UIAlertController 背景色 iOS10