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

SwiftUI Picker绑定Int16失效问题求助及临时方案

问题原因

SwiftUI的Picker要求选中绑定的类型必须和ForEach中元素的类型完全一致。你代码里的150...190默认是Int类型的范围,但绑定的heightInt16是Int16,类型不匹配导致Picker无法正确关联选中项和绑定值,所以没法正常工作。

解决方案

不用额外维护Int类型的中间值,直接让两边类型统一就行,有两种简单方法:

方法1:把ForEach的元素转为Int16

直接将范围里的Int值转换成Int16,让Picker的选项类型和绑定类型匹配:

Picker("", selection: $heightInt16) {
    ForEach((150...190).map { Int16($0) }, id: \.self) {
        Text("\($0)")
    }
}

方法2:转换Binding的类型

利用SwiftUI的Binding.map方法,把Int16的Binding转换成Int的Binding,不用修改ForEach的元素类型:

Picker("", selection: $heightInt16.map(
    get: { Int($0) },
    set: { heightInt16 = Int16($0) }
)) {
    ForEach(150...190, id: \.self) {
        Text("\($0)")
    }
}

两种方法都能解决问题,选哪种看你代码的习惯——第一种更直观,第二种适合不想改动ForEach的场景。

内容的提问来源于stack exchange,提问作者Simone Pistecchia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 17:40:17