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
相关产品推荐
相关产品推荐

