Инициализатор для условного связывания должен иметь необязательный тип

Я не понимаю, почему я получаю эту ошибку. Я не вижу ничего плохого в коде. Пожалуйста помоги!! Спасибо!

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

}

2 ответа

Синтаксис

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и используя ? а также !) не удастся.

Или symptomTrackerViewController или же symptomTrackerViewController.lastSelectedAssessmentEvent не является обязательным.

  1. Проверьте, если ваш symptomTrackerViewController не является обязательным. Если это не является обязательным, он никогда не может быть нулевым, поэтому вы можете удалить его из охраны.

  2. Попробуйте сменить охрану на

    сторож, пусть симптом omTrackerVC = sympomTrackerViewController, пусть событие = sympomTrackerViewController.lastSelectedAssessmentEvent else { return }

Когда вы используете if let something = somethingElse, что-то еще должно быть необязательным.

Другие вопросы по тегам