1

我在下面的代码中得到一个表达式类型 '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 并没有在键入后提供类contracts中的属性。以下是模型: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
        }
    }
}

有人可以解释这个问题并提供解决方案吗?

4

1 回答 1

1

为了使您的绑定起作用quantity,不能为零。

实际上,而不是:

$order.quantity.contracts

你正在尝试做

$order.quantity?.contracts

这是不允许的。quantity如果为 nil ,您的 Picker 应该如何表现?

一个解决方案可能是使quantity非可选:

struct Order {
    var quantity: Quantity
}

另请注意,您的代码将无法编译:contractsare of typeInt但您返回userEnteredContractswhich are of typeInt?

您可能希望将其设为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
        }
    }
}
于 2020-08-14T06:07:14.370 回答