我正在构建一个 AutoCompletion 视图,并希望传递一个包含要自动完成的字段的对象。目前我有两种不同的类型,我需要在一个属性上自动完成,这两个属性的名称相同。我创建了一个协议,并使用它来构建一个通用视图来接受它。
我遇到的问题是 onReceive 破坏了编译。不幸的是,除了“无法推断复杂的闭包返回类型...”之外,我无法收到错误消息,但如果我注释掉 onReceive,错误就会清除。
如果我将结构中的 LocationNameAutoComplete 替换为 Address,那么它可以编译并运行良好 - 但这意味着我不能将它与其他类型的 FactorySite 一起使用。
如果我能看到有关 onReceive 的实际错误消息,那将是一个开始......
有没有更好的方法来做到这一点?
谢谢
struct LocationNameTextField<T>: View where T: LocationNameAutoComplete {
@ObservedObject var address: T
var body: some View {
VStack {
TextField("", text: $address.location_name)
.onReceive(self.address.$location_name) { attr in
print("OK")
}
}
}
}
protocol LocationNameAutoComplete: ObservableObject {
var location_name: String {get set}
}
struct Address: LocationNameAutoComplete {
@Published var location_name: String
}
struct FactorySite: LocationNameAutoComplete {
@Published var location_name: String
}