我创建了一个@propertyWrapper 来限制变量可以达到的数量。我在 SwiftUI 视图中使用增加变量值的按钮进行了尝试,它可以工作,变量在初始化程序中设置的最大数处停止。但是,如果我使用 Textflied 尝试它不起作用,如果我插入的数字高于一组数字,则不会发生任何事情,它会让我这样做。我该如何解决这个问题,我知道这个问题与绑定有关,但我不知道它到底是什么,这里是代码:
import SwiftUI
struct ContentView: View {
@Maximum(maximum: 12) var quantity: Int
var body: some View {
NavigationView{
Form{
TextField("", value: $quantity, format: .number, prompt: Text("Pizza").foregroundColor(.red))
Button {
quantity += 1
} label: {
Text("\(quantity)")
}
}
}
}
}
@propertyWrapper
struct Maximum<T: Comparable> where T: Numeric {
@State private var number: T = 0
var max: T
var wrappedValue: T {
get { number }
nonmutating set { number = min(newValue, max) }
}
var projectedValue: Binding<T> {
Binding(
get: { wrappedValue },
set: { wrappedValue = $0 }
)
}
init(maximum: T){
max = maximum
}
}
extension Maximum: DynamicProperty {
}