Swift类型不匹配错误:无法将Binding<Date>?转换为Date?
解决SwiftUI中Binding?转Date?的类型不匹配问题
错误原因分析
编译器报错「无法将类型‘BindingEditablePopupViewModel的初始化代码中:你传递了$viewModel.selectedDate.wrappedValue,但该参数预期接收Date?类型,而$viewModel.selectedDate本身是Binding<Date>?类型,错误的写法导致类型不匹配。
代码修正方案
首先明确EditablePopupViewModel的参数要求,分两种情况修正:
情况1:EditablePopupViewModel的selectedDay参数需要Date?类型
直接传递viewModel.selectedDate(当前值),而非通过Binding取wrappedValue:
EditablePopupViewModel( selectedDay: viewModel.selectedDate, isEditablePopupShowing: $viewModel.isEditablePopupShowing )
情况2:EditablePopupViewModel的selectedDay参数需要Binding<Date?>类型
直接传递$viewModel.selectedDate(Binding对象),不需要额外取wrappedValue:
EditablePopupViewModel( selectedDay: $viewModel.selectedDate, isEditablePopupShowing: $viewModel.isEditablePopupShowing )
额外检查点
同时确认EditablePopupView的selectedDay参数类型:
- 如果该参数预期是
Date?,则将selectedDay: $viewModel.selectedDate改为selectedDay: viewModel.selectedDate - 如果预期是
Binding<Date?>,则保持selectedDay: $viewModel.selectedDate即可
修改后的关键代码片段示例:
.overlay( Group { if isSelected { EditablePopupView( viewModel: EditablePopupViewModel( selectedDay: viewModel.selectedDate, isEditablePopupShowing: $viewModel.isEditablePopupShowing ), selectedDay: viewModel.selectedDate, isEditablePopupShowing: $viewModel.isEditablePopupShowing, popupText1: viewModel.popupText1, popupText2: viewModel.popupText2, savedTexts: viewModel.savedTexts ) } } )
内容的提问来源于stack exchange,提问作者Ricardo
相关产品推荐
相关产品推荐

