SwiftUI Picker 选择参数给出 "Expression type 'Binding<_>' is ambiguous without more context" 错误
SwiftUI Picker selection parameter giving "Expression type 'Binding<_>' is ambiguous without more context" error
我收到 表达式类型 'Binding<_>' 在没有更多上下文的情况下不明确 错误 $order.quantity.contracts
以下代码:
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)")
}
}
}
}
事实上,Xcode 并没有在 Quantity
class 中为我提供 $order.quantity.
中的 contracts
属性。以下是型号:
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
non-optional:
struct Order {
var quantity: Quantity
}
另请注意,您的代码将无法编译:contracts
属于 Int
类型,但您 return userEnteredContracts
属于 Int?
您可能希望将 contracts
设为可选:
struct Quantity: Hashable {
private var userEnteredContracts: Int?
var contracts: Int? {
get {
return userEnteredContracts
}
set(newContracts) {
userEnteredContracts = newContracts
}
}
}
或提供默认值:
struct Quantity: Hashable {
private var userEnteredContracts: Int?
var contracts: Int {
get {
return userEnteredContracts ?? 0
}
set(newContracts) {
userEnteredContracts = newContracts
}
}
}
我收到 表达式类型 'Binding<_>' 在没有更多上下文的情况下不明确 错误 $order.quantity.contracts
以下代码:
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)")
}
}
}
}
事实上,Xcode 并没有在 Quantity
class 中为我提供 $order.quantity.
中的 contracts
属性。以下是型号:
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
non-optional:
struct Order {
var quantity: Quantity
}
另请注意,您的代码将无法编译:contracts
属于 Int
类型,但您 return userEnteredContracts
属于 Int?
您可能希望将 contracts
设为可选:
struct Quantity: Hashable {
private var userEnteredContracts: Int?
var contracts: Int? {
get {
return userEnteredContracts
}
set(newContracts) {
userEnteredContracts = newContracts
}
}
}
或提供默认值:
struct Quantity: Hashable {
private var userEnteredContracts: Int?
var contracts: Int {
get {
return userEnteredContracts ?? 0
}
set(newContracts) {
userEnteredContracts = newContracts
}
}
}