我是新的快速和编码在一般情况下,并有困难获得预期的结果从一个比较器运算符在一个函数。
我已经对我所面临的问题做了一个简化的版本。我有多个按钮,我希望通过将“count”的值更改为该按钮的数目来跟踪选择哪一个按钮。我希望按钮的背景是绿色的,当选择时,显示它们是被选中的,但是,我无法使它工作。
我在调用函数的'.background()‘修饰符中使用了一个三元操作符。不管'count‘是什么值,函数始终返回'false’。在按钮下面,我编写了一种更详细的方法,它返回正确的bool值。
我不明白为什么函数没有返回正确的值。
struct storedValues {
var count = 0
}
func checkTapped(_ val: Int) -> Bool {
@State var values = storedValues()
return values.count == val
}
struct ContentView: View {
@State private var values = storedValues()
var body: some View {
VStack {
// Buttons to change value of count
HStack{
Text("Set count to 1")
.padding()
.onTapGesture {
values.count = 1
}
.background(checkTapped(1) ? .green : .gray)
Text("Set count to 2")
.padding()
.onTapGesture {
values.count = 2
}
.background(checkTapped(2) ? .green : .gray)
}
// Expanded operation meant to be performed by checkTapped, works correctly
if values.count == 1 {
Text("Count = 1")
.background(.green)
} else if values.count == 2 {
Text("Count = 2")
.background(.green)
} else {
Text("Count != 1,2")
}
}
}
}发布于 2022-09-08 13:58:10
您将在storedValues函数中创建一个新的checkTapped实例,而不是与存储在视图中的实例进行比较。
不需要这样做,只需在storedValues上声明storedValues并将count属性与val进行比较。这将确保始终检查存储在视图中的状态,而不是错误地创建新的临时实例。
与您的问题无关,但是在Swift中键入名称应该是UpperCamelCase,所以您应该将storedValues重命名为StoredValues。
struct StoredValues {
var count = 0
func checkTapped(_ val: Int) -> Bool {
count == val
}
}
struct ContentView: View {
@State private var values = StoredValues()
var body: some View {
VStack {
// Buttons to change value of count
HStack{
Text("Set count to 1")
.padding()
.onTapGesture {
values.count = 1
}
.background(values.checkTapped(1) ? .green : .gray)
Text("Set count to 2")
.padding()
.onTapGesture {
values.count = 2
}
.background(values.checkTapped(2) ? .green : .gray)
}
// Expanded operation meant to be performed by checkTapped, works correctly
if values.count == 1 {
Text("Count = 1")
.background(.green)
} else if values.count == 2 {
Text("Count = 2")
.background(.green)
} else {
Text("Count != 1,2")
}
}
}
}https://stackoverflow.com/questions/73650103
复制相似问题