我不明白为什么我会收到此错误。我没有看到代码有任何问题。请帮忙!!谢谢!
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)
}
}
}
}
答案 0 :(得分:1)
语法
if let someVal = someVal {
//Inside the braces someVal is unwrapped
}
当等号两边的变量名相同时起作用。
然而,代码
guard let someVal = someVal else {
return
}
不合法。我相信第一种形式if let
条件绑定允许您使用相同名称解包可选项的原因是重新分配仅在由if语句的大括号创建的范围的内部级别内有效。< / p>
相比之下,当可选的展开成功时,guard语句不会在执行的代码周围添加大括号。 someVar
的新定义无效,内部范围没有。
它的第二部分是听起来symptomTrackerViewController
不是可选的。如果symptomTrackerViewController
不是可选的,那么任何尝试解包它的代码(if let
,guard let
以及使用?
和!
)都将失败。
答案 1 :(得分:0)
symptomTrackerViewController
或symptomTrackerViewController.lastSelectedAssessmentEvent
不是可选的。
检查您的symptomTrackerViewController
是否可选。如果它不是可选的,它永远不会是零,所以你可以将它从守卫中移除。
尝试更换后卫
警告让症状跟踪VSC =症状跟踪控制器, let event = symptomTrackerViewController.lastSelectedAssessmentEvent 别的{return}
当您使用if let something = somethingElse
时,
somethingElse必须是可选的。