我无法在SwiftUI视图的主体中创建一个变量作为对枚举的绑定。我收到错误消息:
无法为类型为'Binding
'的类型调用初始化程序 类型为'(get:@escaping()-> LifeEvent ?,的参数列表,设置为: @转义()->())'
如果将LifeEvent?
的{{1}}更改为相同的错误,则报错
LifeEvent
在此失败的声明之后,我还有其他声明可以很好地工作到Int的绑定:
enum LifeEvent: String, PickableEnum, Codable, Hashable {
case debutEtude
case finEtude
case dependence
case deces
case cessationActivite
case liquidationPension
}
struct TimeSpanEditView: View {
var body: some View {
let internalToEvent = Binding<LifeEvent?> ( // I get the error here
get: { () -> LifeEvent? in
return LifeEvent.cessationActivite
},
set: {
}
)
编辑
我不能使用let internalTo = Binding<Int> (
get: {
switch self.timeSpan {
case .ending (let to, _),
.periodic(_ , _ , let to),
.spanning(_ , let to):
return to
default:
return Date.now.year
}
},
set: {
switch self.timeSpan {
case .ending (_, _):
self.timeSpan = .ending(to: $0, toEvent: nil)
case .periodic(let from, let period, _):
self.timeSpan = .periodic(from: from, period: period, to: $0)
case .spanning(let from, _):
self.timeSpan = .spanning(from: from, to: $0)
default:
fatalError("ExpenseTimeSpan : Case out of bound")
}
}
)
,因为当lifeEvent更改(=>进入集合)并且@State不支持WillSet而绑定确实支持get / set时,我需要执行一些操作并更改模型属性的值
答案 0 :(得分:0)
作为@Binding
的替代方法,您可以在@Published
中使用@ObservableObject
:
class ViewModel: ObservableObject {
@Published var lifeEvent: LifeEvent? {
didSet { // or alternatively willSet (depending on the use case)
// do whatever you need just after the lifeEvent is changed
}
}
}
struct TimeSpanEditView: View {
@ObservedObject private var viewModel = ViewModel()
...
}
并像这样访问您的绑定:
self.$viewModel.lifeEvent