首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >函数返回意外值中的快速比较运算符

问函数返回意外值中的快速比较运算符
EN

Stack Overflow用户
提问于 2022-09-08 13:46:30
回答 1查看 32关注 0票数 -1

我是新的快速和编码在一般情况下,并有困难获得预期的结果从一个比较器运算符在一个函数。

我已经对我所面临的问题做了一个简化的版本。我有多个按钮,我希望通过将“count”的值更改为该按钮的数目来跟踪选择哪一个按钮。我希望按钮的背景是绿色的,当选择时,显示它们是被选中的,但是,我无法使它工作。

我在调用函数的'.background()‘修饰符中使用了一个三元操作符。不管'count‘是什么值,函数始终返回'false’。在按钮下面,我编写了一种更详细的方法,它返回正确的bool值。

我不明白为什么函数没有返回正确的值。

代码语言:javascript
复制
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")
            }
        }
    }
}
EN

回答 1

Stack Overflow用户

发布于 2022-09-08 13:58:10

您将在storedValues函数中创建一个新的checkTapped实例,而不是与存储在视图中的实例进行比较。

不需要这样做,只需在storedValues上声明storedValues并将count属性与val进行比较。这将确保始终检查存储在视图中的状态,而不是错误地创建新的临时实例。

与您的问题无关,但是在Swift中键入名称应该是UpperCamelCase,所以您应该将storedValues重命名为StoredValues。

代码语言:javascript
复制
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")
            }
        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73650103

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档