Инициализатор для условного связывания должен иметь необязательный тип
Я не понимаю, почему я получаю эту ошибку. Я не вижу ничего плохого в коде. Пожалуйста помоги!! Спасибо!
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
не является обязательным.
Проверьте, если ваш
symptomTrackerViewController
не является обязательным. Если это не является обязательным, он никогда не может быть нулевым, поэтому вы можете удалить его из охраны.Попробуйте сменить охрану на
сторож, пусть симптом omTrackerVC = sympomTrackerViewController, пусть событие = sympomTrackerViewController.lastSelectedAssessmentEvent else { return }
Когда вы используете if let something = somethingElse
, что-то еще должно быть необязательным.