Swift中_运算符与in结合的用法解析及单选按钮取消选中逻辑疑问
关于Swift中
_、闭包in以及单选按钮取消选中逻辑的解答 一、拆解set: { _ in selection.wrappedValue = tag }
1. in的含义
in是Swift闭包语法里的关键字,专门用来分隔「闭包的参数定义部分」和「闭包要执行的代码部分」。你之前在for...in循环里见到的是另一种语法场景,但这里的in属于闭包的固定写法。
标准闭包的基础结构是:
{ 参数名: 参数类型 in // 闭包要执行的代码 }
如果参数类型能被编译器自动推断,还可以省略类型,就像你代码里的简化写法。
2. _在这里的作用
Binding的set闭包默认会接收一个参数——这个参数是要设置的新值(这里是Bool类型,对应按钮的选中状态)。但这段代码里,我们完全不需要用到这个新值:不管传入的是true还是false,最终都要把selection.wrappedValue设为当前按钮的tag。
用_就表示:「我知道这个位置有参数,但我不需要使用它」,既告诉编译器我们没遗漏参数,又不用给参数起名,避免不必要的变量定义。
举个对比例子,如果需要用到这个参数,代码会写成这样:
set: { newValue in print("要设置的新选中状态是:\(newValue)") selection.wrappedValue = tag }
二、单选按钮取消选中的逻辑在哪里
这段代码里并没有直接写「取消选中」的代码,而是通过SwiftUI的Binding响应式特性自动实现的:
- 同组的所有单选按钮都绑定到同一个
selection变量(Binding<V?>类型)。 - 当你点击当前按钮,
set闭包触发,把selection.wrappedValue设为当前按钮的tag。 - 其他按钮的
get闭包({ selection.wrappedValue == tag })会重新计算:因为selection的值已经变成了当前按钮的tag,不等于它们自己的tag,所以这些按钮的_isSelected会自动变成false,也就是被取消选中。
简单说,取消选中的逻辑是通过「其他按钮的get闭包自动更新状态」实现的,不需要单独写代码去设置。
内容的提问来源于stack exchange,提问作者user3500192
相关产品推荐
相关产品推荐

