我不明白为什么会出现此错误。我看不出代码有什么问题。请帮忙!!谢谢!
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 let
、guard let
和使用 ?
和 !
) 将失败。
关于ios - 条件绑定(bind)的初始化程序必须具有可选类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41047388/