You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 05:26:00