问题描述
在以下代码中,$order.quantity.contracts
处出现 表达式类型'Binding <_>'是模棱两可的情况, 错误:
struct ContractsPickerView: View {
@Binding var order: Order
var question: String
var body: some View {
Error
|
|
V
Picker(selection: $order.quantity.contracts,label: Text("\(question)").font(.headline)) {
ForEach(0..<101,id: \.self) { contracts in
Text("\(contracts)")
}
}
}
}
实际上,在键入contracts
之后,Xcode并未在Quantity
类中为我提供$order.quantity.
属性。这是模型:
struct Order {
var quantity: Quantity?
}
struct Quantity: Hashable {
private var userEnteredContracts: Int?
var contracts: Int {
get {
return userEnteredContracts
}
set(newContracts) {
userEnteredContracts = newContracts
}
}
}
有人可以解释这个问题并提供解决方案吗?
解决方法
为使绑定工作quantity
不可为零。
实际上是:
$order.quantity.contracts
您正在尝试
$order.quantity?.contracts
这是不允许的。如果quantity
为零,您的选择器应该如何表现?
一种解决方案可能是使quantity
为非可选:
struct Order {
var quantity: Quantity
}
还请注意,您的代码将无法编译:{{1}}的类型为contracts
,但是您返回的Int
的类型为userEnteredContracts
您可能希望将Int?
设为可选:
contracts
或提供默认值:
struct Quantity: Hashable {
private var userEnteredContracts: Int?
var contracts: Int? {
get {
return userEnteredContracts
}
set(newContracts) {
userEnteredContracts = newContracts
}
}
}