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
        }
    }
}