SwiftUI Picker选择参数给出“表达式类型'Binding <_>'是模棱两可的,没有更多上下文”错误

问题描述

在以下代码中,$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
        }
    }
}

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...