0

我不明白为什么我会收到这个错误。我看不出代码有什么问题。请帮忙!!谢谢!

      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)
        }
    }
}

}

4

2 回答 2

1

语法

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

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

然而,代码

guard let someVal = someVal else {
  return
}

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

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

第二部分是听起来你symptomTrackerViewController不是可选的。如果symptomTrackerViewController不是可选的,那么任何试图解开它的代码(if let,guard let和使用?and !)都会失败。

于 2016-12-08T19:47:04.190 回答
0

要么symptomTrackerViewControllersymptomTrackerViewController.lastSelectedAssessmentEvent不是可选的。

  1. 检查你的symptomTrackerViewController是否是可选的。如果它不是可选的,则它永远不能为零,因此您可以将其从警卫中删除。

  2. 尝试换岗

    守卫让症状跟踪器VC = 症状跟踪器视图控制器,让事件 = 症状跟踪器视图控制器.lastSelectedAssessmentEvent 否则 { 返回 }

当您使用if let something = somethingElse时,somethingElse 必须是可选的。

于 2016-12-08T19:35:48.700 回答