SwiftUI中.disabled修饰符多变量判断失效问题排查
问题分析与解决方案
你的问题出在逻辑运算符的使用不符合预期需求,先拆解当前代码的逻辑:
当前Test button的禁用条件是:
.disabled(ex1 == ex2 || ex3 == "123")
这个条件的意思是:只要ex1等于ex2 或者 ex3等于"123",按钮就会被禁用。
而你预期的是「只要ex1不等于ex2,按钮就启用,不管ex3的值」,这就导致了逻辑不匹配——当ex1 != ex2时,按钮的禁用状态本该由ex3决定,但你误以为此时ex3不应该起作用,所以觉得修改ex3无效。
针对需求的两种解决方案
方案1:仅以ex1和ex2的关系决定按钮状态
如果你希望只要ex1不等于ex2,按钮就启用,ex3不影响禁用状态,直接去掉ex3的判断即可:
Button(action: { // actions }) { Text("Test button") } .disabled(ex1 == ex2) // 仅当ex1等于ex2时禁用按钮
方案2:两个条件同时满足才禁用按钮
如果你希望只有当ex1等于ex2 并且 ex3等于"123"时,按钮才禁用,把逻辑运算符从||改成&&:
Button(action: { // actions }) { Text("Test button") } .disabled(ex1 == ex2 && ex3 == "123") // 两个条件同时满足才禁用
验证当前逻辑的正确性(如果需要保留ex3的影响)
如果你确实需要ex3等于"123"时禁用按钮,当前代码逻辑是正确的:
- 当ex1 != ex2且ex3 = "123":按钮禁用
- 当ex1 != ex2且ex3 ≠ "123":按钮启用
你可以重新测试这个场景,确认按钮状态是否随ex3的变化而切换。
内容的提问来源于stack exchange,提问作者user17864647
相关产品推荐
相关产品推荐

